From bcfd99b040c594314eeafe7a6706b66d1c507c0e Mon Sep 17 00:00:00 2001 From: hfroger Date: Sun, 28 Jul 2024 21:10:07 +0100 Subject: [PATCH] Add private fields to proposal components (#314) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * admin form_builder private fields * chore: CustomFieldsBuilders is a [public, private] array * fixup! chore: CustomFieldsBuilders is a [public, private] array * refacto: CustomFieldsBuilders is a hash of editor * chore: handle renaming key with private fields * logs: remove debugging * chore: show private fields form * chore: show private fields on create form * chore: display private field editors in proposals * chore: save private body in DB and display it admin side * fix: migration on decidim 0.24 * fix: more robust way to know if a proposal is new * fix: edit proposal private fields * wip: move 024 fixes to 026 * chore: improve UX on editor * fix: export custom fields * compat: simple_proposal fields * fix: private fields isolation * New Crowdin updates (#294) * New translations en.yml (Czech) * New translations en.yml (Czech) * Allow to limit non-accepted amendments in proposals (#261) * add admin config option in proposals * add amendments controller concern * limit amendments on controller * limit only new and create methods * add modal explanation window * do not show modal if amendments limit disabled * add test cases * fx locales * add readme * fix locales * remove quotes * remove space * New Crowdin updates (#264) * New translations en.yml (Romanian) * New translations en.yml (French) * New translations en.yml (Spanish) * New translations en.yml (Catalan) * New translations en.yml (Czech) * New translations en.yml (German) * New translations en.yml (Basque) * New translations en.yml (Hungarian) * New translations en.yml (Italian) * New translations en.yml (Dutch) * New translations en.yml (Swedish) * New translations en.yml (Portuguese, Brazilian) * New translations en.yml (French) * New translations en.yml (French) * New translations en.yml (Czech) * New translations en.yml (French) * New translations en.yml (Spanish) * New translations en.yml (Catalan) * New translations en.yml (Czech) * New translations en.yml (German) * New translations en.yml (Japanese) * New translations en.yml (German) * New translations en.yml (Romanian) * New translations en.yml (Basque) * New translations en.yml (Dutch) * New translations en.yml (Swedish) * New translations en.yml (Portuguese, Brazilian) * New translations en.yml (Hungarian) * New translations en.yml (German) * New translations en.yml (French) * New translations en.yml (Spanish) * New translations en.yml (Catalan) * New translations en.yml (German) * New translations en.yml (French) * New translations en.yml (Spanish) * New translations en.yml (Catalan) * New translations en.yml (German) * New translations en.yml (French) * New translations en.yml (Japanese) * New translations en.yml (Czech) * New translations en.yml (Japanese) (#269) * skip hidden emendations --------- Co-authored-by: PokeCode Bot <109160875+pokecodebot@users.noreply.github.com> * fix hidden images in public proposals (#301) * fix hidden images in public proposals * fix offences * fix 27 configuration * fix overrides * fix: default to english on custom proposal fields * lint: automatic rubocop corrections * lint: fix offenses * fix: don't update custom_fields_renderer * fix: en locales * refactor: rename export name for explicit trad * New Crowdin updates (#303) * New translations en.yml (French) * New translations en.yml (Spanish) * New translations en.yml (Catalan) * New translations en.yml (Czech) * New translations en.yml (German) * New translations en.yml (Italian) * New translations en.yml (Japanese) * chore: move private_fields to decidim_awesome_proposal_extra_fields * fix: rubocop ofenses * clean PR * chore: handle empty fieldsets * chore: improve admin readability * chore: remove cards where it makes no sense to have card * chore: encrypt private data * revert: leave package-lock untouch * fixup! revert: leave package-lock untouch * fix: rubocop * chore: prettier on eslint on packs * fix: tests * fix: rubocop * add proposal_custom_fields submenu * add proposal_private_custom_fields view * delete unused migration * fix rubocop * add disclosure for proposal_private_custom_fields * apply styles to proposal_private_custom_fields * refactor views * use standard attribute encryptors * add custom fields specs * remove wrong deface * fix styles on form * clean form * add commands specs * fix rendering * fix javascript * ffi * summary fixes * fix more specs * convert to polymorphic * fix specs, fix amendments * fix specs * fix serialzier specs * fix export specs * version bump * readme image * add private display in admin * fix checksums * add notes export * handle translations * add docs * changelog --------- Co-authored-by: Renato Co-authored-by: Hadrien Froger Co-authored-by: PokeCode Bot <109160875+pokecodebot@users.noreply.github.com> Co-authored-by: Ivan Vergés Co-authored-by: elviabth --- CHANGELOG.md | 15 +- Gemfile | 2 + Gemfile.lock | 320 +- README.md | 139 +- .../admin/needs_constraint_helpers.rb | 2 +- .../admin/update_proposal_override.rb | 31 + .../create_collaborative_draft_override.rb | 27 + .../proposals/create_proposal_override.rb | 27 + .../update_collaborative_draft_override.rb | 27 + .../proposals/update_proposal_override.rb | 26 + .../admin/create_proposal_custom_field.rb | 7 +- .../admin/destroy_proposal_custom_field.rb | 9 +- .../content_security_policy.rb | 34 + .../admin/constraints_controller.rb | 4 +- .../proposal_custom_fields_controller.rb | 16 +- .../proposals/proposal_form_override.rb | 21 + ...oposal_wizard_create_step_form_override.rb | 1 + .../decidim_awesome/admin/config_form.rb | 40 +- .../amendments_helper_override.rb | 66 + .../breadcrumb_helper_override.rb | 23 + .../proposals/application_helper_override.rb | 63 +- .../admin/config_constraints_helpers.rb | 4 +- .../amendments_helper_override.rb | 48 - .../has_proposal_extra_fields.rb | 47 +- .../decidim_awesome/proposal_extra_field.rb | 21 +- .../show/add_private_body.html.erb.deface | 7 + .../show/replace_body.html.erb.deface | 5 + .../decidim_awesome/admin/auto_edit.js | 165 +- .../admin/custom_fields_builder.js | 6 +- .../decidim_awesome/editors/tabs_focus.js | 27 +- .../forms/custom_fields_renderer.js | 1 + .../proposals/custom_fields.js | 46 +- .../decidim_awesome/admin/auto_edits.scss | 26 + .../decidim_awesome/admin/codemirror.scss | 6 + .../decidim_awesome/admin/constraints.scss | 73 +- .../decidim_awesome/admin/custom_fields.scss | 41 +- .../decidim_awesome/forms/custom_fields.scss | 187 + .../decidim_awesome/admin/permissions.rb | 2 +- ...crumb_root_menu_item_presenter_override.rb | 23 + .../menu_item_presenter_override.rb | 0 .../menu_presenter_override.rb | 0 .../proposals/proposal_presenter_override.rb | 20 + .../proposals/proposal_serializer_methods.rb | 72 + .../proposals/proposal_serializer_override.rb | 38 + .../proposals/private_proposal_serializer.rb | 34 + .../add_proposal_type_custom_fields.rb | 59 + ...e.rb => add_proposal_type_vote_weights.rb} | 4 +- .../admin/config/_autoedit_box_label.html.erb | 9 +- .../admin/config/_constraints.html.erb | 36 +- .../admin/config/_form_admins.html.erb | 2 +- .../admin/config/_form_editors.html.erb | 28 +- .../_form_proposal_custom_fields.html.erb | 52 +- ...rm_proposal_private_custom_fields.html.erb | 1 + .../admin/config/_form_proposals.html.erb | 88 + .../admin/config/_form_styles.html.erb | 2 +- .../admin/config/show.html.erb | 24 +- .../admin/proposals/_editor.html.erb | 13 +- .../admin/proposals/_private_body.html.erb | 13 + .../custom_fields/_form_render.html.erb | 9 +- config/locales/en.yml | 39 +- ...decidim_awesome_proposal_private_fields.rb | 29 + examples/private_custom_fields.png | Bin 0 -> 121000 bytes lib/decidim/decidim_awesome/admin_engine.rb | 27 +- .../api/types/localized_custom_fields_type.rb | 22 + .../types/translated_custom_fields_type.rb | 51 + lib/decidim/decidim_awesome/awesome.rb | 13 +- .../decidim_awesome/awesome_helpers.rb | 6 +- lib/decidim/decidim_awesome/custom_fields.rb | 8 + lib/decidim/decidim_awesome/engine.rb | 209 +- lib/decidim/decidim_awesome/menu.rb | 126 + .../decidim_awesome/test/initializer.rb | 5 +- ...editor.rb => box_label_editor_examples.rb} | 34 +- .../test/shared_examples/config_examples.rb | 28 +- .../shared_examples/custom_fields_examples.rb | 155 + .../test/shared_examples/editor_examples.rb | 100 +- .../shared_examples/scoped_admins_examples.rb | 56 +- .../test/shared_examples/summary_examples.rb | 117 +- lib/decidim/decidim_awesome/version.rb | 2 +- package-lock.json | 9509 +++++++++++------ package.json | 4 +- spec/cells/content_blocks/map_cell_spec.rb | 26 +- .../create_proposal_custom_field_spec.rb | 8 +- spec/commands/admin/create_proposal_spec.rb | 63 + .../commands/admin/destroy_constraint_spec.rb | 12 + spec/commands/admin/update_proposal_spec.rb | 61 + spec/commands/create_proposal_spec.rb | 57 + spec/commands/update_proposal_spec.rb | 56 + .../admin/config_controller_spec.rb | 4 +- .../admin/constraints_controller_spec.rb | 10 +- .../admin/custom_redirects_controller_spec.rb | 10 +- .../admin/menu_hacks_controller_spec.rb | 353 +- spec/forms/admin/config_form_spec.rb | 26 + .../proposal_wizard_create_step_form_spec.rb | 59 +- spec/lib/system_checker_spec.rb | 8 +- spec/models/proposal_extra_field_spec.rb | 85 +- .../private_proposal_serializer_spec.rb | 86 + spec/serializers/proposal_serializer_spec.rb | 55 +- .../decidim/open_data_exporter_spec.rb | 54 + .../system/admin/admin_accountability_spec.rb | 54 +- ...dmin_edits_proposals_custom_fields_spec.rb | 201 +- .../admin_manages_menu_overrides_spec.rb | 259 +- ...min_manages_proposal_custom_fields_spec.rb | 188 +- .../admin/admin_manages_scoped_admins_spec.rb | 26 +- .../admin/admin_manages_scoped_styles_spec.rb | 32 +- spec/system/admin/admin_spec.rb | 84 +- spec/system/admin/scoped_admins_spec.rb | 17 +- spec/system/awesome_map/awesome_map_spec.rb | 48 +- spec/system/check_images_in_editors_spec.rb | 2 +- .../create_proposal_custom_fields_spec.rb | 65 +- .../edit_proposal_custom_fields_spec.rb | 45 +- spec/system/public/awesome_iframe_spec.rb | 83 + spec/system/public/edit_proposals_spec.rb | 74 + .../home_content_block_menu_hacks_spec.rb | 197 + spec/system/voting_cards_spec.rb | 294 +- .../localized_custom_fields_type_spec.rb | 91 + spec/types/proposal_type_spec.rb | 83 +- .../translated_custom_fields_type_spec.rb | 126 + 117 files changed, 10808 insertions(+), 4873 deletions(-) create mode 100644 app/commands/concerns/decidim/decidim_awesome/proposals/admin/update_proposal_override.rb create mode 100644 app/commands/concerns/decidim/decidim_awesome/proposals/create_collaborative_draft_override.rb create mode 100644 app/commands/concerns/decidim/decidim_awesome/proposals/create_proposal_override.rb create mode 100644 app/commands/concerns/decidim/decidim_awesome/proposals/update_collaborative_draft_override.rb create mode 100644 app/commands/concerns/decidim/decidim_awesome/proposals/update_proposal_override.rb create mode 100644 app/controllers/concerns/decidim/decidim_awesome/content_security_policy.rb create mode 100644 app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_override.rb rename app/forms/{ => concerns}/decidim/decidim_awesome/proposals/proposal_wizard_create_step_form_override.rb (99%) create mode 100644 app/helpers/concerns/decidim/decidim_awesome/amendments_helper_override.rb create mode 100644 app/helpers/concerns/decidim/decidim_awesome/breadcrumb_helper_override.rb rename app/helpers/{ => concerns}/decidim/decidim_awesome/proposals/application_helper_override.rb (51%) delete mode 100644 app/helpers/decidim/decidim_awesome/amendments_helper_override.rb create mode 100644 app/overrides/decidim/proposals/admin/proposals/show/add_private_body.html.erb.deface create mode 100644 app/overrides/decidim/proposals/admin/proposals/show/replace_body.html.erb.deface create mode 100644 app/packs/stylesheets/decidim/decidim_awesome/forms/custom_fields.scss create mode 100644 app/presenters/concerns/decidim/decidim_awesome/breadcrumb_root_menu_item_presenter_override.rb rename app/presenters/{ => concerns}/decidim/decidim_awesome/menu_item_presenter_override.rb (100%) rename app/presenters/{ => concerns}/decidim/decidim_awesome/menu_presenter_override.rb (100%) create mode 100644 app/presenters/concerns/decidim/decidim_awesome/proposals/proposal_presenter_override.rb create mode 100644 app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_methods.rb create mode 100644 app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_override.rb create mode 100644 app/serializers/decidim/decidim_awesome/proposals/private_proposal_serializer.rb create mode 100644 app/types/concerns/decidim/decidim_awesome/add_proposal_type_custom_fields.rb rename app/types/concerns/decidim/decidim_awesome/{proposal_type_override.rb => add_proposal_type_vote_weights.rb} (78%) create mode 100644 app/views/decidim/decidim_awesome/admin/config/_form_proposal_private_custom_fields.html.erb create mode 100644 app/views/decidim/decidim_awesome/admin/proposals/_private_body.html.erb create mode 100644 db/migrate/20240531224204_add_decidim_awesome_proposal_private_fields.rb create mode 100644 examples/private_custom_fields.png create mode 100644 lib/decidim/decidim_awesome/api/types/localized_custom_fields_type.rb create mode 100644 lib/decidim/decidim_awesome/api/types/translated_custom_fields_type.rb create mode 100644 lib/decidim/decidim_awesome/menu.rb rename lib/decidim/decidim_awesome/test/shared_examples/{box_label_editor.rb => box_label_editor_examples.rb} (80%) create mode 100644 lib/decidim/decidim_awesome/test/shared_examples/custom_fields_examples.rb create mode 100644 spec/commands/admin/create_proposal_spec.rb create mode 100644 spec/commands/admin/update_proposal_spec.rb create mode 100644 spec/commands/create_proposal_spec.rb create mode 100644 spec/commands/update_proposal_spec.rb create mode 100644 spec/serializers/private_proposal_serializer_spec.rb create mode 100644 spec/services/decidim/open_data_exporter_spec.rb create mode 100644 spec/system/public/awesome_iframe_spec.rb create mode 100644 spec/system/public/edit_proposals_spec.rb create mode 100644 spec/system/public/home_content_block_menu_hacks_spec.rb create mode 100644 spec/types/localized_custom_fields_type_spec.rb create mode 100644 spec/types/translated_custom_fields_type_spec.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e5c29977..d3810d7ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,19 @@ CHANGELOG ========= +v0.10.3 +------ + +Compatibility: + - Decidim v0.27.4 + +Features: + - Added Private Custom Fields feature + - Added GraphQL types for weighted voting in the API + - Added GraphQL types for custom fields in the API + - Adds parsed information about custom fields in the Proposals export + - Adds parsed information bout private custom fields when admins exports private data + v0.10.2 ------ @@ -56,7 +69,7 @@ Compatibility: Features: - Fixes for the menu hacker - + v0.9.1 ------ diff --git a/Gemfile b/Gemfile index d2b2f13ab..b131c15c4 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,9 @@ ruby RUBY_VERSION DECIDIM_VERSION = "0.27.6" gem "decidim", DECIDIM_VERSION +# this causes failures if not enabled (check if still necessary in the future) gem "decidim-decidim_awesome", path: "." +gem "decidim-templates", DECIDIM_VERSION gem "bootsnap", "~> 1.4" diff --git a/Gemfile.lock b/Gemfile.lock index 84a507f9c..be20894ee 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - decidim-decidim_awesome (0.10.2) + decidim-decidim_awesome (0.10.3) decidim-admin (>= 0.26.0, < 0.28) decidim-core (>= 0.26.0, < 0.28) deface (>= 1.5) @@ -10,40 +10,40 @@ PATH GEM remote: https://rubygems.org/ specs: - actioncable (6.1.7.6) - actionpack (= 6.1.7.6) - activesupport (= 6.1.7.6) + actioncable (6.1.7.8) + actionpack (= 6.1.7.8) + activesupport (= 6.1.7.8) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (6.1.7.6) - actionpack (= 6.1.7.6) - activejob (= 6.1.7.6) - activerecord (= 6.1.7.6) - activestorage (= 6.1.7.6) - activesupport (= 6.1.7.6) + actionmailbox (6.1.7.8) + actionpack (= 6.1.7.8) + activejob (= 6.1.7.8) + activerecord (= 6.1.7.8) + activestorage (= 6.1.7.8) + activesupport (= 6.1.7.8) mail (>= 2.7.1) - actionmailer (6.1.7.6) - actionpack (= 6.1.7.6) - actionview (= 6.1.7.6) - activejob (= 6.1.7.6) - activesupport (= 6.1.7.6) + actionmailer (6.1.7.8) + actionpack (= 6.1.7.8) + actionview (= 6.1.7.8) + activejob (= 6.1.7.8) + activesupport (= 6.1.7.8) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (6.1.7.6) - actionview (= 6.1.7.6) - activesupport (= 6.1.7.6) + actionpack (6.1.7.8) + actionview (= 6.1.7.8) + activesupport (= 6.1.7.8) 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.6) - actionpack (= 6.1.7.6) - activerecord (= 6.1.7.6) - activestorage (= 6.1.7.6) - activesupport (= 6.1.7.6) + actiontext (6.1.7.8) + actionpack (= 6.1.7.8) + activerecord (= 6.1.7.8) + activestorage (= 6.1.7.8) + activesupport (= 6.1.7.8) nokogiri (>= 1.8.5) - actionview (6.1.7.6) - activesupport (= 6.1.7.6) + actionview (6.1.7.8) + activesupport (= 6.1.7.8) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) @@ -51,22 +51,22 @@ GEM active_link_to (1.0.5) actionpack addressable - activejob (6.1.7.6) - activesupport (= 6.1.7.6) + activejob (6.1.7.8) + activesupport (= 6.1.7.8) globalid (>= 0.3.6) - activemodel (6.1.7.6) - activesupport (= 6.1.7.6) - activerecord (6.1.7.6) - activemodel (= 6.1.7.6) - activesupport (= 6.1.7.6) - activestorage (6.1.7.6) - actionpack (= 6.1.7.6) - activejob (= 6.1.7.6) - activerecord (= 6.1.7.6) - activesupport (= 6.1.7.6) + activemodel (6.1.7.8) + activesupport (= 6.1.7.8) + activerecord (6.1.7.8) + activemodel (= 6.1.7.8) + activesupport (= 6.1.7.8) + activestorage (6.1.7.8) + actionpack (= 6.1.7.8) + activejob (= 6.1.7.8) + activerecord (= 6.1.7.8) + activesupport (= 6.1.7.8) marcel (~> 1.0) mini_mime (>= 1.1.0) - activesupport (6.1.7.6) + activesupport (6.1.7.8) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -74,10 +74,10 @@ GEM zeitwerk (~> 2.3) acts_as_list (0.9.19) activerecord (>= 3.0) - addressable (2.8.5) - public_suffix (>= 2.0.2, < 6.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) ast (2.4.2) - axe-core-api (4.9.0) + axe-core-api (4.9.1) dumb_delegator virtus axe-core-rspec (4.1.0) @@ -88,9 +88,9 @@ GEM descendants_tracker (~> 0.0.4) ice_nine (~> 0.11.0) thread_safe (~> 0.3, >= 0.3.1) - base64 (0.1.1) + base64 (0.2.0) batch-loader (1.5.0) - bcrypt (3.1.19) + bcrypt (3.1.20) better_html (1.0.16) actionview (>= 4.0) activesupport (>= 4.0) @@ -101,10 +101,10 @@ GEM smart_properties bigdecimal (3.1.8) bindex (0.8.1) - bootsnap (1.17.0) + bootsnap (1.18.4) msgpack (~> 1.2) browser (2.7.1) - builder (3.2.4) + builder (3.3.0) byebug (11.1.3) capybara (3.40.0) addressable @@ -134,8 +134,8 @@ GEM cells-rails (0.1.5) actionpack (>= 5.0) cells (>= 4.1.6, < 5.0.0) - charlock_holmes (0.7.7) - chef-utils (18.4.12) + charlock_holmes (0.7.9) + chef-utils (18.5.0) concurrent-ruby childprocess (4.1.0) codecov (0.6.0) @@ -150,14 +150,15 @@ GEM execjs coffee-script-source (1.12.2) commonmarker (0.23.10) - concurrent-ruby (1.2.2) + concurrent-ruby (1.3.3) crack (1.0.0) bigdecimal rexml crass (1.0.6) - css_parser (1.16.0) + css_parser (1.17.1) addressable - date (3.3.3) + csv (3.3.0) + date (3.3.4) date_validator (0.12.0) activemodel (>= 3) activesupport (>= 3) @@ -340,13 +341,13 @@ GEM rainbow (>= 2.1.0) descendants_tracker (0.0.4) thread_safe (~> 0.3, >= 0.3.1) - devise (4.9.3) + devise (4.9.4) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0) responders warden (~> 1.2.3) - devise-i18n (1.12.0) + devise-i18n (1.12.1) devise (>= 4.9.0) devise_invitable (2.0.9) actionmailer (>= 5.0) @@ -356,8 +357,8 @@ GEM doc2text (0.4.7) nokogiri (>= 1.13.2, < 1.17.0) rubyzip (~> 2.3.0) - docile (1.4.0) - doorkeeper (5.6.6) + docile (1.4.1) + doorkeeper (5.7.1) railties (>= 5) doorkeeper-i18n (4.0.1) dumb_delegator (1.0.0) @@ -371,9 +372,9 @@ GEM smart_properties erbse (0.1.4) temple - erubi (1.12.0) + erubi (1.13.0) escape_utils (1.3.0) - excon (0.104.0) + excon (0.111.0) execjs (2.9.1) extended-markdown-filter (0.7.0) html-pipeline (~> 2.9) @@ -384,16 +385,25 @@ GEM railties (>= 3.0.0) faker (2.23.0) i18n (>= 1.8.11, < 2) - faraday (2.7.11) - base64 - faraday-net_http (>= 2.0, < 3.1) - ruby2_keywords (>= 0.0.4) - faraday-net_http (3.0.2) - ffi (1.16.3) + faraday (2.10.1) + faraday-net_http (>= 2.0, < 3.2) + logger + faraday-net_http (3.1.1) + net-http + ffi (1.17.0-aarch64-linux-gnu) + ffi (1.17.0-aarch64-linux-musl) + ffi (1.17.0-arm-linux-gnu) + ffi (1.17.0-arm-linux-musl) + ffi (1.17.0-arm64-darwin) + ffi (1.17.0-x86-linux-gnu) + ffi (1.17.0-x86-linux-musl) + ffi (1.17.0-x86_64-darwin) + ffi (1.17.0-x86_64-linux-gnu) + ffi (1.17.0-x86_64-linux-musl) file_validators (3.0.0) activemodel (>= 3.2) mime-types (>= 1.0) - fog-core (2.3.0) + fog-core (2.5.0) builder excon (~> 0.71) formatador (>= 0.2, < 2.0) @@ -407,7 +417,9 @@ GEM activesupport (>= 4.1, < 7.1) railties (>= 4.1, < 7.1) gemoji (3.0.1) - geocoder (1.8.2) + geocoder (1.8.3) + base64 (>= 0.1.0) + csv (>= 3.0.0) globalid (1.2.1) activesupport (>= 6.1) graphql (1.12.24) @@ -419,16 +431,17 @@ GEM graphql (~> 1.12) html-pipeline (~> 2.9) sass (~> 3.4) - hashdiff (1.0.1) + hashdiff (1.1.1) hashie (5.0.0) - highline (3.0.1) + highline (3.1.0) + reline hkdf (0.3.0) html-pipeline (2.14.3) activesupport (>= 2) nokogiri (>= 1.4) html_tokenizer (0.0.8) htmlentities (4.3.4) - i18n (1.14.1) + i18n (1.14.5) concurrent-ruby (~> 1.0) i18n-tasks (0.9.37) activesupport (>= 4.0.2) @@ -440,17 +453,19 @@ GEM rails-i18n rainbow (>= 2.2.2, < 4.0) terminal-table (>= 1.5.1) - icalendar (2.10.1) + icalendar (2.10.2) ice_cube (~> 0.16) - ice_cube (0.16.4) + ice_cube (0.17.0) ice_nine (0.11.2) - image_processing (1.12.2) + image_processing (1.13.0) mini_magick (>= 4.9.5, < 5) ruby-vips (>= 2.0.17, < 3) invisible_captcha (0.13.0) rails (>= 3.2.0) + io-console (0.7.2) json (2.7.2) - jwt (2.7.1) + jwt (2.8.2) + base64 kaminari (1.2.2) activesupport (>= 4.1.0) kaminari-actionview (= 1.2.2) @@ -469,15 +484,16 @@ GEM kramdown (~> 2.0) launchy (2.5.2) addressable (~> 2.8) - letter_opener (1.8.1) - launchy (>= 2.2, < 3) + letter_opener (1.10.0) + launchy (>= 2.2, < 4) letter_opener_web (1.4.1) actionmailer (>= 3.2) letter_opener (~> 1.0) railties (>= 3.2) - listen (3.8.0) + listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) + logger (1.6.0) loofah (2.19.1) crass (~> 1.0.2) nokogiri (>= 1.5.9) @@ -486,7 +502,7 @@ GEM net-imap net-pop net-smtp - marcel (1.0.2) + marcel (1.0.4) matrix (0.4.2) mdl (0.13.0) kramdown (~> 2.3) @@ -494,31 +510,43 @@ GEM mixlib-cli (~> 2.1, >= 2.1.1) mixlib-config (>= 2.2.1, < 4) mixlib-shellout - method_source (1.0.0) - mime-types (3.5.1) + method_source (1.1.0) + mime-types (3.5.2) mime-types-data (~> 3.2015) - mime-types-data (3.2023.1003) - mini_magick (4.12.0) + mime-types-data (3.2024.0806) + mini_magick (4.13.2) mini_mime (1.1.5) - minitest (5.20.0) + minitest (5.24.1) mixlib-cli (2.1.8) mixlib-config (3.0.27) tomlrb - mixlib-shellout (3.2.7) + mixlib-shellout (3.2.8) chef-utils msgpack (1.7.2) multi_xml (0.6.0) - net-imap (0.4.4) + net-http (0.4.1) + uri + net-imap (0.4.14) date net-protocol net-pop (0.1.2) net-protocol - net-protocol (0.2.1) + net-protocol (0.2.2) timeout - net-smtp (0.4.0) + net-smtp (0.5.0) net-protocol - nio4r (2.5.9) - nokogiri (1.14.5-x86_64-linux) + nio4r (2.7.3) + nokogiri (1.16.7-aarch64-linux) + racc (~> 1.4) + nokogiri (1.16.7-arm-linux) + racc (~> 1.4) + nokogiri (1.16.7-arm64-darwin) + racc (~> 1.4) + nokogiri (1.16.7-x86-linux) + racc (~> 1.4) + nokogiri (1.16.7-x86_64-darwin) + racc (~> 1.4) + nokogiri (1.16.7-x86_64-linux) racc (~> 1.4) oauth (1.1.0) oauth-tty (~> 1.0, >= 1.0.1) @@ -533,24 +561,24 @@ GEM rack (>= 1.2, < 4) snaky_hash (~> 2.0) version_gem (~> 1.1) - omniauth (2.1.1) + omniauth (2.1.2) hashie (>= 3.4.6) rack (>= 2.2.3) rack-protection omniauth-facebook (5.0.0) omniauth-oauth2 (~> 1.2) - omniauth-google-oauth2 (1.1.1) + omniauth-google-oauth2 (1.1.2) jwt (>= 2.0) - oauth2 (~> 2.0.6) + oauth2 (~> 2.0) omniauth (~> 2.0) - omniauth-oauth2 (~> 1.8.0) + omniauth-oauth2 (~> 1.8) omniauth-oauth (1.2.0) oauth omniauth (>= 1.0, < 3) omniauth-oauth2 (1.8.0) oauth2 (>= 1.4, < 3) omniauth (~> 2.0) - omniauth-rails_csrf_protection (1.0.1) + omniauth-rails_csrf_protection (1.0.2) actionpack (>= 4.2) omniauth (~> 2.0) omniauth-twitter (1.4.0) @@ -560,10 +588,10 @@ GEM paper_trail (12.3.0) activerecord (>= 5.2) request_store (~> 1.1) - parallel (1.23.0) + parallel (1.26.1) parallel_tests (3.13.0) parallel - parser (3.2.2.4) + parser (3.3.4.2) ast (~> 2.4.1) racc pg (1.1.4) @@ -571,7 +599,7 @@ GEM activerecord (>= 5.2) activesupport (>= 5.2) polyglot (0.3.5) - premailer (1.21.0) + premailer (1.23.0) addressable css_parser (>= 1.12.0) htmlentities (>= 4.0.0) @@ -579,35 +607,36 @@ GEM actionmailer (>= 3) net-smtp premailer (~> 1.7, >= 1.7.9) - public_suffix (5.0.3) - puma (5.6.7) + public_suffix (6.0.1) + puma (5.6.8) nio4r (~> 2.0) - racc (1.7.2) - rack (2.2.8) + racc (1.8.1) + rack (2.2.9) rack-attack (6.7.0) rack (>= 1.0, < 4) rack-cors (1.1.1) rack (>= 2.0.0) - rack-protection (3.1.0) + rack-protection (3.2.0) + base64 (>= 0.1.0) rack (~> 2.2, >= 2.2.4) rack-proxy (0.7.7) rack rack-test (2.1.0) rack (>= 1.3) - rails (6.1.7.6) - actioncable (= 6.1.7.6) - actionmailbox (= 6.1.7.6) - actionmailer (= 6.1.7.6) - actionpack (= 6.1.7.6) - actiontext (= 6.1.7.6) - actionview (= 6.1.7.6) - activejob (= 6.1.7.6) - activemodel (= 6.1.7.6) - activerecord (= 6.1.7.6) - activestorage (= 6.1.7.6) - activesupport (= 6.1.7.6) + rails (6.1.7.8) + actioncable (= 6.1.7.8) + actionmailbox (= 6.1.7.8) + actionmailer (= 6.1.7.8) + actionpack (= 6.1.7.8) + actiontext (= 6.1.7.8) + actionview (= 6.1.7.8) + activejob (= 6.1.7.8) + activemodel (= 6.1.7.8) + activerecord (= 6.1.7.8) + activestorage (= 6.1.7.8) + activesupport (= 6.1.7.8) bundler (>= 1.15.0) - railties (= 6.1.7.6) + railties (= 6.1.7.8) sprockets-rails (>= 2.0.0) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) @@ -622,30 +651,33 @@ GEM rails-i18n (6.0.0) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 7) - railties (6.1.7.6) - actionpack (= 6.1.7.6) - activesupport (= 6.1.7.6) + railties (6.1.7.8) + actionpack (= 6.1.7.8) + activesupport (= 6.1.7.8) method_source rake (>= 12.2) thor (~> 1.0) rainbow (3.1.1) - rake (13.1.0) + rake (13.2.1) ransack (2.4.2) activerecord (>= 5.2.4) activesupport (>= 5.2.4) i18n rb-fsevent (0.11.2) - rb-inotify (0.10.1) + rb-inotify (0.11.1) ffi (~> 1.0) redcarpet (3.6.0) redis (4.8.1) - regexp_parser (2.8.2) + regexp_parser (2.9.2) + reline (0.5.9) + io-console (~> 0.5) request_store (1.5.1) rack (>= 1.4) responders (3.1.1) actionpack (>= 5.2) railties (>= 5.2) - rexml (3.2.6) + rexml (3.3.4) + strscan rspec (3.13.0) rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) @@ -655,7 +687,7 @@ GEM rspec-rails (>= 3.0.0, < 6.2.0) rspec-core (3.13.0) rspec-support (~> 3.13.0) - rspec-expectations (3.13.0) + rspec-expectations (3.13.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) rspec-html-matchers (0.9.4) @@ -686,8 +718,8 @@ GEM rubocop-ast (>= 1.17.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.30.0) - parser (>= 3.2.1.0) + rubocop-ast (1.32.0) + parser (>= 3.3.1.0) rubocop-faker (1.1.0) faker (>= 2.12.0) rubocop (>= 0.82.0) @@ -698,10 +730,10 @@ GEM rubocop-rspec (2.11.1) rubocop (~> 1.19) ruby-progressbar (1.13.0) - ruby-vips (2.2.0) + ruby-vips (2.2.2) ffi (~> 1.12) - ruby2_keywords (0.0.5) - rubyXL (3.4.25) + logger + rubyXL (3.4.27) nokogiri (>= 1.10.8) rubyzip (>= 1.3.0) rubyzip (2.3.2) @@ -740,27 +772,29 @@ GEM sprockets (4.2.1) concurrent-ruby (~> 1.0) rack (>= 2.2.4, < 4) - sprockets-rails (3.4.2) - actionpack (>= 5.2) - activesupport (>= 5.2) + sprockets-rails (3.5.2) + actionpack (>= 6.1) + activesupport (>= 6.1) sprockets (>= 3.0.0) ssrf_filter (1.1.2) + strscan (3.1.0) temple (0.10.3) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) - thor (1.3.0) + thor (1.3.1) thread_safe (0.3.6) - tilt (2.3.0) - timeout (0.4.0) + tilt (2.4.0) + timeout (0.4.1) tomlrb (2.0.3) tzinfo (2.0.6) concurrent-ruby (~> 1.0) uber (0.1.0) unicode-display_width (2.5.0) + uri (0.13.0) valid_email2 (2.3.1) activemodel (>= 3.2) mail (~> 2.5) - version_gem (1.1.3) + version_gem (1.1.4) virtus (2.0.0) axiom-types (~> 0.1) coercible (~> 1.0) @@ -780,7 +814,7 @@ GEM activemodel (>= 6.0.0) bindex (>= 0.4.0) railties (>= 6.0.0) - webmock (3.23.0) + webmock (3.23.1) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) @@ -799,13 +833,26 @@ GEM activesupport wisper (2.0.1) wisper-rspec (1.1.0) - wkhtmltopdf-binary (0.12.6.6) + wkhtmltopdf-binary (0.12.6.7) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.6.12) + zeitwerk (2.6.17) PLATFORMS + aarch64-linux + aarch64-linux-gnu + aarch64-linux-musl + arm-linux + arm-linux-gnu + arm-linux-musl + arm64-darwin + x86-linux + x86-linux-gnu + x86-linux-musl + x86_64-darwin x86_64-linux + x86_64-linux-gnu + x86_64-linux-musl DEPENDENCIES bootsnap (~> 1.4) @@ -814,6 +861,7 @@ DEPENDENCIES decidim (= 0.27.6) decidim-decidim_awesome! decidim-dev (= 0.27.6) + decidim-templates (= 0.27.6) faker (~> 2.14) letter_opener_web (~> 1.3) listen (~> 3.1) @@ -827,4 +875,4 @@ RUBY VERSION ruby 3.0.6p216 BUNDLED WITH - 2.4.22 + 2.5.10 diff --git a/README.md b/README.md index cc818ace6..cf0ed9035 100644 --- a/README.md +++ b/README.md @@ -121,12 +121,77 @@ Technically, the content is stored in the database as an XML document compatible ![Custom fields screenshot](examples/custom-fields-2.png) ![Custom fields screenshot](examples/custom-fields-1.gif) +Note that the custom fields are build using the jQuery library [formBuilder](https://formbuilder.online). This package is included in Decidim Awesome but the i18n translations are not. By default they are dynamically downloaded from the CDN https://cdn.jsdelivr.net/npm/formbuilder-languages@1.1.0/. +If you wish to provide an alternative place for those files, you can configure the variable `form_builder_langs_location` in an initializer: + +```ruby +# config/initializers/awesome_defaults.rb + +# A URL where to obtain the translations for the FormBuilder component +# you can a custom place if you are worried about the CDN geolocation +# Download them from https://github.com/kevinchappell/formBuilder-languages + +# For instance, copy them to your /public/fb_locales/ directory and set the path here: +Decidim::DecidimAwesome.configure do |config| + config.form_builder_langs_location = "/fb_locales/" +end +``` + +##### 12.1. GraphQL types for custom fields + +Custom fields are displayed in the GaphQL API according to their definition in a formatted array of objects in the attribute `bodyFields`. + +A query to extract this information could look like this (see that the original `body` is also available): + +```graphql +{ + component(id: 999) { + ... on Proposals { + proposals { + edges { + node { + id + bodyFields { + locales + translation(locale: "en") + translations { + locale + fields + machineTranslated + } + } + body { + locales + translations { + locale + text + machineTranslated + } + } + } + } + } + } + } +} +``` + +You can then use this custom type in your GraphQL queries and mutations to handle the custom fields in proposals. + + +##### 12.2. Private Custom fields + +Similar to the custom fields feature, but only admins can see the content of the fields. This is useful for adding metadata to proposals that should not be visible to the public (such as contact data). +Data is stored encrypted in the database. + +![Private Custom fields screenshot](examples/private_custom_fields.png) + #### 13. Custom Redirections (or URL shortener feature) Admins can create custom paths that redirect to other places. Destinations can be internal absolute paths or external sites. There's also possible to choose to sanitize (ie: remove) any query string or to maintain it (so you can decide to use). -For instance you can create a redirection like +For instance you can create a redirection like * `/take-me-somewhere` => `/processes/canary-islands` @@ -274,6 +339,28 @@ This view is used by the proposal cell in lists. It must implement the vote butt Note that, it is strongly recommended to add and HTML tag element with the id `proposal-<%= proposal.id %>-votes-count` so the Ajax vote re-loader can work. Even if you don't use (in this case use a `style="display:none"` attribute), this is because the Ajax reloader always look for this element and throw JavaScript errors if not. +##### 17.1 GraphQL Types for weighted voting + +When a weighed voting mechanism is selected, the GraphQL API will show those weights separated in each proposal. +The attribute that holds this information is `vote_weights`, a query example could look like this: + +```graphql +{ + component(id: 999) { + ... on Proposals { + proposals { + edges { + node { + id + voteWeights + } + } + } + } + } +} +``` + #### 18. Limiting amendments in proposals By default, when proposals can be amended, any number of amendments can be created. @@ -285,6 +372,17 @@ This option is disable by default, must be enabled in the component's configurat ![Limiting amendments](examples/limit_amendments.png) +#### 18. Maintenance tools + +The awesome admin provides with some maintenance tools (more to come in the future); + +##### 18.1 Old private data removal + +These tools are designed to help remove old data as required by laws such as GDPR, particularly in relation to private custom fields. +This menu will show if there's any data older than 6 months (configurable) and will let admins remove it component by component. + +![Private data](examples/private_data.png) + #### To be continued... We're not done! Please check the [issues](/decidim-ice/decidim-module-decidim_awesome/issues) (and participate) to see what's on our mind @@ -308,6 +406,17 @@ bundle exec rails decidim:upgrade bundle exec rails db:migrate ``` +Go to `yourdomain/admin/decidim_awesome` and start tweaking things! + +> **EXPERTS ONLY** +> +> Under the hood, when running `bundle exec rails decidim:upgrade` the `decidim-decidim_awesome` gem will run the following two tasks (that can also be run manually if you consider): +> +> ```bash +> bin/rails decidim_decidim_awesome:install:migrations +> bin/rails decidim_decidim_awesome:webpacker:install +> ``` + If you are upgrading from a version prior to 0.8, make sure to visit the URL `/admin/decidim_awesome/checks` and run image migrations for the old images: ![Check image migrations](examples/check_image_migrations.png) @@ -329,20 +438,20 @@ However you can force some specific version using `gem "decidim-decidim_awesome" Depending on your Decidim version, choose the corresponding Awesome version to ensure compatibility: | Awesome version | Compatible Decidim versions | -|---|---| -| 0.10.0 | >= 0.26.7, >= 0.27.3 | -| 0.9.2 | >= 0.26.7, >= 0.27.3 | -| 0.9.x | 0.26.x, 0.27.x | -| 0.8.x | 0.25.x, 0.26.x | -| 0.7.x | 0.23.x, 0.24.x | -| 0.6.x | 0.22.x, 0.23.x | -| 0.5.x | 0.21.x, 0.22.x | - -> *Heads up!* +|-----------------|-----------------------------| +| 0.10.x | >= 0.26.7, >= 0.27.3 | +| 0.9.2 | >= 0.26.7, >= 0.27.3 | +| 0.9.x | 0.26.x, 0.27.x | +| 0.8.x | 0.25.x, 0.26.x | +| 0.7.x | 0.23.x, 0.24.x | +| 0.6.x | 0.22.x, 0.23.x | +| 0.5.x | 0.21.x, 0.22.x | + +> *Heads up!* > * version 0.10.0 requires database migrations! Don't forget the migrations step when updating. > * version 0.8.0 removes CSS Themes for tenants. If you have been using them you will have to manually migrate them to custom styles. -> * version 0.8.0 uses ActiveStorage, same as Decidim 0.25. 2 new rake task have been introduced to facilitate the migration: `bin/rails decidim_awesome:active_storage_migrations:check_migration_from_carrierwave` and -`bin/rails decidim_awesome:active_storage_migrations:migrate_from_carrierwave` +> * version 0.8.0 uses ActiveStorage, same as Decidim 0.25. 2 new rake task have been introduced to facilitate the migration: `bin/rails decidim_awesome:active_storage_migrations:check_migration_from_carrierwave` and + `bin/rails decidim_awesome:active_storage_migrations:migrate_from_carrierwave` > * version 0.7.1 requires database migrations! Don't forget the migrations step when updating. ## Configuration @@ -463,8 +572,8 @@ However, this project works with different versions of Decidim. In order to test You can run run tests against the legacy Decidim versions by using: ```bash -export DATABASE_USERNAME= -export DATABASE_PASSWORD= +export DATABASE_USERNAME= +export DATABASE_PASSWORD= RBENV_VERSION=2.7.6 BUNDLE_GEMFILE=Gemfile.legacy bundle RBENV_VERSION=2.7.6 BUNDLE_GEMFILE=Gemfile.legacy bundle exec rake test_app RBENV_VERSION=2.7.6 BUNDLE_GEMFILE=Gemfile.legacy bundle exec rspec diff --git a/app/commands/concerns/decidim/decidim_awesome/admin/needs_constraint_helpers.rb b/app/commands/concerns/decidim/decidim_awesome/admin/needs_constraint_helpers.rb index 87e19a8b5..fbc8572b0 100644 --- a/app/commands/concerns/decidim/decidim_awesome/admin/needs_constraint_helpers.rb +++ b/app/commands/concerns/decidim/decidim_awesome/admin/needs_constraint_helpers.rb @@ -20,7 +20,7 @@ def constraint_can_be_destroyed?(constraint) return true if constraint.awesome_config.constraints.count > 1 case constraint.awesome_config.var.to_s - when /^proposal_custom_field/ + when /^proposal_(private_)?custom_field/ false else true diff --git a/app/commands/concerns/decidim/decidim_awesome/proposals/admin/update_proposal_override.rb b/app/commands/concerns/decidim/decidim_awesome/proposals/admin/update_proposal_override.rb new file mode 100644 index 000000000..2aa2639bd --- /dev/null +++ b/app/commands/concerns/decidim/decidim_awesome/proposals/admin/update_proposal_override.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + module Proposals + module Admin + ## + # Decorates update draft and update proposal + # to avoid private field to be logged in PaperTrail. + module UpdateProposalOverride + extend ActiveSupport::Concern + + included do + private + + alias_method :decidim_original_update_proposal, :update_proposal + + def update_proposal + decidim_original_update_proposal + update_private_field! + end + + def update_private_field! + @proposal.update_private_body!(form.private_body) if form.private_body.present? + end + end + end + end + end + end +end diff --git a/app/commands/concerns/decidim/decidim_awesome/proposals/create_collaborative_draft_override.rb b/app/commands/concerns/decidim/decidim_awesome/proposals/create_collaborative_draft_override.rb new file mode 100644 index 000000000..762832664 --- /dev/null +++ b/app/commands/concerns/decidim/decidim_awesome/proposals/create_collaborative_draft_override.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + module Proposals + ## + # Decorate create_collaborative_draft to avoid + # private data to be in PaperTrail + module CreateCollaborativeDraftOverride + extend ActiveSupport::Concern + + included do + private + + alias_method :decidim_original_create_collaborative_draft, :create_collaborative_draft + + def create_collaborative_draft + created_draft = decidim_original_create_collaborative_draft + # Update the proposal with the private body, to + # avoid tracebility on private fields. + created_draft.update_private_body!(form.private_body) if form.private_body.present? + end + end + end + end + end +end diff --git a/app/commands/concerns/decidim/decidim_awesome/proposals/create_proposal_override.rb b/app/commands/concerns/decidim/decidim_awesome/proposals/create_proposal_override.rb new file mode 100644 index 000000000..eadff000f --- /dev/null +++ b/app/commands/concerns/decidim/decidim_awesome/proposals/create_proposal_override.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + module Proposals + ## + # Decorate create_proposal to avoid + # private data to be in PaperTrail + module CreateProposalOverride + extend ActiveSupport::Concern + + included do + private + + alias_method :decidim_original_create_proposal, :create_proposal + + def create_proposal + created_proposal = decidim_original_create_proposal + # Update the proposal with the private body, to + # avoid tracebility on private fields. + created_proposal.update_private_body!(form.private_body) if form.private_body.present? + end + end + end + end + end +end diff --git a/app/commands/concerns/decidim/decidim_awesome/proposals/update_collaborative_draft_override.rb b/app/commands/concerns/decidim/decidim_awesome/proposals/update_collaborative_draft_override.rb new file mode 100644 index 000000000..1a16231fd --- /dev/null +++ b/app/commands/concerns/decidim/decidim_awesome/proposals/update_collaborative_draft_override.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + module Proposals + ## + # Decorates update draft and update proposal + # to avoid private field to be logged in PaperTrail. + module UpdateCollaborativeDraftOverride + extend ActiveSupport::Concern + + included do + private + + alias_method :decidim_original_update_collaborative_draft, :update_collaborative_draft + + def update_collaborative_draft + decidim_original_update_collaborative_draft + # Update the proposal with the private body, to + # avoid tracebility on private fields. + @collaborative_draft.update_private_body!(form.private_body) if form.private_body.present? + end + end + end + end + end +end diff --git a/app/commands/concerns/decidim/decidim_awesome/proposals/update_proposal_override.rb b/app/commands/concerns/decidim/decidim_awesome/proposals/update_proposal_override.rb new file mode 100644 index 000000000..f1d0ffd18 --- /dev/null +++ b/app/commands/concerns/decidim/decidim_awesome/proposals/update_proposal_override.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + module Proposals + ## + # Decorates update draft and update proposal + # to avoid private field to be logged in PaperTrail. + module UpdateProposalOverride + extend ActiveSupport::Concern + include Admin::UpdateProposalOverride + + included do + private + + alias_method :decidim_original_update_draft, :update_draft + + def update_proposal + decidim_original_update_proposal + update_private_field! + end + end + end + end + end +end diff --git a/app/commands/decidim/decidim_awesome/admin/create_proposal_custom_field.rb b/app/commands/decidim/decidim_awesome/admin/create_proposal_custom_field.rb index b0a7264b7..1dcdba039 100644 --- a/app/commands/decidim/decidim_awesome/admin/create_proposal_custom_field.rb +++ b/app/commands/decidim/decidim_awesome/admin/create_proposal_custom_field.rb @@ -8,9 +8,10 @@ class CreateProposalCustomField < Command # Public: Initializes the command. # - def initialize(organization) + def initialize(organization, config_var = :proposal_custom_fields) @organization = organization @ident = rand(36**8).to_s(36) + @config_var = config_var end # Executes the command. Broadcasts these events: @@ -20,13 +21,13 @@ def initialize(organization) # # Returns nothing. def call - fields = AwesomeConfig.find_or_initialize_by(var: :proposal_custom_fields, organization: @organization) + fields = AwesomeConfig.find_or_initialize_by(var: @config_var, organization: @organization) fields.value = {} unless fields.value.is_a? Hash # TODO: prevent (unlikely) colisions with exisiting values fields.value[@ident] = default_definition fields.save! - create_constraint_never(:proposal_custom_field) + create_constraint_never(@config_var == :proposal_custom_fields ? :proposal_custom_field : :proposal_private_custom_field) broadcast(:ok, @ident) rescue StandardError => e diff --git a/app/commands/decidim/decidim_awesome/admin/destroy_proposal_custom_field.rb b/app/commands/decidim/decidim_awesome/admin/destroy_proposal_custom_field.rb index 8f32fe5e1..654fb18f4 100644 --- a/app/commands/decidim/decidim_awesome/admin/destroy_proposal_custom_field.rb +++ b/app/commands/decidim/decidim_awesome/admin/destroy_proposal_custom_field.rb @@ -8,9 +8,10 @@ class DestroyProposalCustomField < Command # # key - the key to destroy inise proposal_custom_fields # organization - def initialize(key, organization) + def initialize(key, organization, config_var = :proposal_custom_fields) @key = key @organization = organization + @config_var = config_var end # Executes the command. Broadcasts these events: @@ -20,14 +21,16 @@ def initialize(key, organization) # # Returns nothing. def call - fields = AwesomeConfig.find_by(var: :proposal_custom_fields, organization: @organization) + fields = AwesomeConfig.find_by(var: @config_var, organization: @organization) return broadcast(:invalid, "Not a hash") unless fields&.value.is_a? Hash return broadcast(:invalid, "#{key} key invalid") unless fields.value.has_key?(@key) fields.value.except!(@key) fields.save! + # remove constrains associated (a new config var is generated automatically, by removing it, it will trigger destroy on dependents) - constraint = AwesomeConfig.find_by(var: "proposal_custom_field_#{@key}", organization: @organization) + constraint = @config_var == :proposal_custom_fields ? :proposal_custom_field : :proposal_private_custom_field + constraint = AwesomeConfig.find_by(var: "#{constraint}_#{@key}", organization: @organization) constraint.destroy! if constraint.present? broadcast(:ok, @key) diff --git a/app/controllers/concerns/decidim/decidim_awesome/content_security_policy.rb b/app/controllers/concerns/decidim/decidim_awesome/content_security_policy.rb new file mode 100644 index 000000000..a180f3dd3 --- /dev/null +++ b/app/controllers/concerns/decidim/decidim_awesome/content_security_policy.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + module ContentSecurityPolicy + extend ActiveSupport::Concern + + included do + after_action :append_awesome_csp_directives + end + + private + + def append_awesome_csp_directives + # this is necessary for custom fields + content_security_policy.append_csp_directive("font-src", "data:") if DecidimAwesome.enabled?(:proposal_custom_fields) + append_awesome_intergram_directives + end + + def append_awesome_intergram_directives + return unless DecidimAwesome.enabled?(:intergram_for_admins) || DecidimAwesome.enabled?(:intergram_for_public) + + intergram = URI.parse(DecidimAwesome.intergram_url) + if intergram.host && intergram.scheme + content_security_policy.append_csp_directive("script-src", "#{intergram.scheme}://#{intergram.host}") + content_security_policy.append_csp_directive("frame-src", "#{intergram.scheme}://#{intergram.host}") + # this script is in the intergram code, but does not look necessary to work + # content_security_policy.append_csp_directive("frame-src", "http://www.loadmill.com") + # content_security_policy.append_csp_directive("frame-src", "http://app.loadmill.com") + end + end + end + end +end diff --git a/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb b/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb index 346cbd688..7cd114f2f 100644 --- a/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb +++ b/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb @@ -10,7 +10,7 @@ class ConstraintsController < DecidimAwesome::Admin::ApplicationController layout false before_action do - enforce_permission_to :edit_config, constraint_key + render plain: "no permissions for #{constraint_key}" unless allowed_to? :edit_config, constraint_key end def new @@ -131,6 +131,8 @@ def constraint_key :scoped_admins when /^proposal_custom_field_/ :proposal_custom_fields + when /^proposal_private_custom_field_/ + :proposal_private_custom_fields else key end diff --git a/app/controllers/decidim/decidim_awesome/admin/proposal_custom_fields_controller.rb b/app/controllers/decidim/decidim_awesome/admin/proposal_custom_fields_controller.rb index b20ee7864..7e2edc422 100644 --- a/app/controllers/decidim/decidim_awesome/admin/proposal_custom_fields_controller.rb +++ b/app/controllers/decidim/decidim_awesome/admin/proposal_custom_fields_controller.rb @@ -6,7 +6,7 @@ module Admin # Global configuration controller class ProposalCustomFieldsController < DecidimAwesome::Admin::ConfigController def create - CreateProposalCustomField.call(current_organization) do + CreateProposalCustomField.call(current_organization, config_var) do on(:ok) do |key| flash[:notice] = I18n.t("config.create_proposal_custom_field.success", key: key, scope: "decidim.decidim_awesome.admin") end @@ -16,11 +16,11 @@ def create end end - redirect_to decidim_admin_decidim_awesome.config_path(:proposal_custom_fields) + redirect_to decidim_admin_decidim_awesome.config_path(config_var) end def destroy - DestroyProposalCustomField.call(params[:key], current_organization) do + DestroyProposalCustomField.call(params[:key], current_organization, config_var) do on(:ok) do |key| flash[:notice] = I18n.t("config.destroy_proposal_custom_field.success", key: key, scope: "decidim.decidim_awesome.admin") end @@ -30,7 +30,15 @@ def destroy end end - redirect_to decidim_admin_decidim_awesome.config_path(:proposal_custom_fields) + redirect_to decidim_admin_decidim_awesome.config_path(config_var) + end + + private + + def config_var + return :proposal_private_custom_fields if params[:private] == "true" + + :proposal_custom_fields end end end diff --git a/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_override.rb b/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_override.rb new file mode 100644 index 000000000..fcae0e19f --- /dev/null +++ b/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_override.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + module Proposals + module ProposalFormOverride + extend ActiveSupport::Concern + + included do + alias_method :decidim_original_map_model, :map_model + attribute :private_body, String + + def map_model(model) + decidim_original_map_model(model) + self.private_body = model.private_body + end + end + end + end + end +end diff --git a/app/forms/decidim/decidim_awesome/proposals/proposal_wizard_create_step_form_override.rb b/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_wizard_create_step_form_override.rb similarity index 99% rename from app/forms/decidim/decidim_awesome/proposals/proposal_wizard_create_step_form_override.rb rename to app/forms/concerns/decidim/decidim_awesome/proposals/proposal_wizard_create_step_form_override.rb index 87ba70ce7..72c703cdd 100644 --- a/app/forms/decidim/decidim_awesome/proposals/proposal_wizard_create_step_form_override.rb +++ b/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_wizard_create_step_form_override.rb @@ -15,6 +15,7 @@ module ProposalWizardCreateStepFormOverride minimum: ->(form) { form.minimum_title_length }, maximum: 150 } + validates :body, presence: true, unless: ->(form) { form.override_validations? || form.minimum_body_length.zero? } validates :body, etiquette: true, unless: ->(form) { form.override_validations? } validates :body, proposal_length: { diff --git a/app/forms/decidim/decidim_awesome/admin/config_form.rb b/app/forms/decidim/decidim_awesome/admin/config_form.rb index 72a8ba05a..7565db8e2 100644 --- a/app/forms/decidim/decidim_awesome/admin/config_form.rb +++ b/app/forms/decidim/decidim_awesome/admin/config_form.rb @@ -8,16 +8,15 @@ module Admin class ConfigForm < Decidim::Form include ActionView::Helpers::SanitizeHelper - attribute :allow_images_in_full_editor, Boolean - attribute :allow_images_in_small_editor, Boolean + attribute :allow_images_in_editors, Boolean + attribute :allow_videos_in_editors, Boolean attribute :allow_images_in_proposals, Boolean - attribute :use_markdown_editor, Boolean - attribute :allow_images_in_markdown_editor, Boolean attribute :auto_save_forms, Boolean attribute :scoped_styles, Hash attribute :proposal_custom_fields, Hash + attribute :proposal_private_custom_fields, Hash attribute :scoped_admins, Hash - attribute :menu, Array[MenuForm] + attribute :menu, [MenuForm] attribute :intergram_for_admins, Boolean attribute :intergram_for_admins_settings, IntergramForm attribute :intergram_for_public, Boolean @@ -36,7 +35,8 @@ class ConfigForm < Decidim::Form attr_accessor :valid_keys validate :css_syntax, if: ->(form) { form.scoped_styles.present? } - validate :json_syntax, if: ->(form) { form.proposal_custom_fields.present? } + validate :json_syntax + validates :validate_title_min_length, presence: true, numericality: { greater_than_or_equal_to: 1, less_than_or_equal_to: 100 } validates :validate_title_max_caps_percent, presence: true, numericality: { greater_than_or_equal_to: 0, less_than_or_equal_to: 100 } validates :validate_title_max_marks_together, presence: true, numericality: { greater_than_or_equal_to: 1 } @@ -71,20 +71,21 @@ def css_syntax end def json_syntax - proposal_custom_fields.each do |key, code| - next unless code + fields = {} + fields.merge!(proposal_custom_fields: proposal_custom_fields.values) if proposal_custom_fields.present? + fields.merge!(proposal_private_custom_fields: proposal_private_custom_fields.values) if proposal_private_custom_fields.present? + fields.each do |key, values| + next if values.blank? - JSON.parse(code) - rescue JSON::ParserError => e - errors.add(:scoped_styles, I18n.t("config.form.errors.incorrect_json", key: key, scope: "decidim.decidim_awesome.admin")) + values.each { |code| JSON.parse(code) } + rescue JSON::JSONError => e + errors.add(key, I18n.t("config.form.errors.incorrect_json", key: key, scope: "decidim.decidim_awesome.admin")) errors.add(key.to_sym, e.message) end end # formBuilder has a bug and do not sanitize text if users copy/paste text with format in the label input def sanitize_labels! - return unless proposal_custom_fields - proposal_custom_fields.transform_values! do |code| next unless code @@ -97,6 +98,19 @@ def sanitize_labels! rescue JSON::ParserError code end + + proposal_private_custom_fields.transform_values! do |code| + next unless code + + json = JSON.parse(code) + json.map! do |item| + item["label"] = strip_tags(item["label"]) + item + end + JSON.generate(json) + rescue JSON::ParserError + code + end end end end diff --git a/app/helpers/concerns/decidim/decidim_awesome/amendments_helper_override.rb b/app/helpers/concerns/decidim/decidim_awesome/amendments_helper_override.rb new file mode 100644 index 000000000..fc8ee6358 --- /dev/null +++ b/app/helpers/concerns/decidim/decidim_awesome/amendments_helper_override.rb @@ -0,0 +1,66 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + module AmendmentsHelperOverride + extend ActiveSupport::Concern + + included do + # original method + alias_method :decidim_amendments_form_field_for, :amendments_form_field_for + + # override with custom fields if scope applies + def amendments_form_field_for(attribute, form, original_resource) + custom_fields, custom_private_fields = awesome_custom_fields(attribute, form) + content = if custom_fields.blank? + decidim_amendments_form_field_for(attribute, form, original_resource) + else + render_amendment_custom_fields_override(custom_fields, attribute, form, original_resource) + end + if custom_private_fields.present? + content = content_tag("div", content) + content += content_tag("div", render_amendment_custom_fields_override(custom_private_fields, :private_body, form, original_resource)) + end + content + end + + private + + def render_amendment_custom_fields_override(custom_fields, attribute, form, original_resource) + # ensure decidim_editor is available as it is only required if the original FormBuilder is called + stylesheet_pack_tag "decidim_editor" + javascript_pack_tag "decidim_editor", defer: false + + custom_fields.translate! + body = amendments_form_fields_value(original_resource, attribute) + custom_fields.apply_xml(body) if body.present? + # TODO: find a way to add errors as form is not the parent form + # form.object.errors.add(attribute, custom_fields.errors) if custom_fields.errors + + editor_image = Decidim::EditorImage.new + editor_options = form.send(:editor_options, editor_image, { context: "participant", lines: 10 }) + editor_upload = form.send(:editor_upload, editor_image, editor_options[:upload]) + render partial: "decidim/decidim_awesome/custom_fields/form_render", + locals: { spec: custom_fields.to_json, editor_options: editor_options, editor_upload: editor_upload, form: form, name: attribute } + end + + # Amendments don't use a URL specifying participatory space and component + # context for awesome config constraints must be obtained from the resource + def awesome_custom_fields(attribute, _form) + return unless attribute == :body + + component = amendable.try(:component) + return unless component + return if component.settings.participatory_texts_enabled? + + awesome_config = Decidim::DecidimAwesome::Config.new(component.organization) + awesome_config.context_from_component(component) + + pub = awesome_config.collect_sub_configs_values("proposal_custom_field") + priv = awesome_config.collect_sub_configs_values("proposal_private_custom_field") + [pub.presence && Decidim::DecidimAwesome::CustomFields.new(pub), priv.presence && Decidim::DecidimAwesome::CustomFields.new(priv)] + end + end + end + end +end diff --git a/app/helpers/concerns/decidim/decidim_awesome/breadcrumb_helper_override.rb b/app/helpers/concerns/decidim/decidim_awesome/breadcrumb_helper_override.rb new file mode 100644 index 000000000..8e5e43fbf --- /dev/null +++ b/app/helpers/concerns/decidim/decidim_awesome/breadcrumb_helper_override.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + module BreadcrumbHelperOverride + extend ActiveSupport::Concern + + included do + def active_breadcrumb_item(target_menu) + active_item = ::Decidim::MenuPresenter.new(target_menu, self).active_item_for_breadcrumb + + return if active_item.blank? + + { + label: active_item.label, + url: active_item.url, + active: active_item.active? + } + end + end + end + end +end diff --git a/app/helpers/decidim/decidim_awesome/proposals/application_helper_override.rb b/app/helpers/concerns/decidim/decidim_awesome/proposals/application_helper_override.rb similarity index 51% rename from app/helpers/decidim/decidim_awesome/proposals/application_helper_override.rb rename to app/helpers/concerns/decidim/decidim_awesome/proposals/application_helper_override.rb index 61894601b..738905482 100644 --- a/app/helpers/decidim/decidim_awesome/proposals/application_helper_override.rb +++ b/app/helpers/concerns/decidim/decidim_awesome/proposals/application_helper_override.rb @@ -12,7 +12,7 @@ module ApplicationHelperOverride # If the content is safe, HTML tags are sanitized, otherwise, they are stripped. def render_proposal_body(proposal) - if awesome_proposal_custom_fields.present? || awesome_config[:allow_images_in_full_editor] || awesome_config[:allow_images_in_small_editor] + if awesome_proposal_custom_fields.present? || awesome_config[:allow_images_in_editors] content = present(proposal).body(links: true, strip_tags: false) sanitized = decidim_sanitize_editor_admin(content, {}) Decidim::ContentProcessor.render_without_format(sanitized).html_safe @@ -23,38 +23,44 @@ def render_proposal_body(proposal) # replace normal method to draw the editor def text_editor_for_proposal_body(form) - custom_fields = awesome_proposal_custom_fields - - return decidim_text_editor_for_proposal_body(form) if custom_fields.blank? - - render_proposal_custom_fields_override(custom_fields, form, :body) + custom_fields = awesome_proposal_custom_fields_for(:body) + custom_private_fields = awesome_proposal_custom_fields_for(:private_body) + + content = if custom_fields.empty? + decidim_text_editor_for_proposal_body(form) + else + render_proposal_custom_fields_override(custom_fields, form, :body) + end + + unless custom_private_fields.empty? + content = content_tag("div", content) + content += content_tag("div", render_proposal_custom_fields_override(custom_private_fields, form, :private_body)) + end + content end # replace admin method to draw the editor (multi lang) def admin_editor_for_proposal_body(form) - custom_fields = awesome_proposal_custom_fields + custom_fields = awesome_proposal_custom_fields_for(:body) - return form.translated(:editor, :body, hashtaggable: true) if custom_fields.blank? + return if custom_fields.empty? locales = form.send(:locales) - return render_proposal_custom_fields_override(custom_fields, form, "body_#{locales.first}", locales.first) if locales.length == 1 tabs_id = form.send(:sanitize_tabs_selector, form.options[:tabs_id] || "#{form.object_name}-body-tabs") label_tabs = form.content_tag(:div, class: "label--tabs") do - field_label = form.send(:label_i18n, "body", form.label_for("proposal_custom_fields")) - language_selector = "".html_safe language_selector = form.create_language_selector(locales, tabs_id, "body") if form.options[:label] != false - safe_join [field_label, language_selector] + safe_join [content_tag("label"), language_selector] end tabs_content = form.content_tag(:div, class: "tabs-content", data: { tabs_content: tabs_id }) do locales.each_with_index.inject("".html_safe) do |string, (locale, index)| tab_content_id = "#{tabs_id}-body-panel-#{index}" - string + content_tag(:div, class: form.send(:tab_element_class_for, "panel", index), id: tab_content_id) do + string + content_tag(:div, class: form.send(:tab_element_class_for, "panel", index), id: tab_content_id, "aria-hidden": index.zero? ? "false" : "true") do render_proposal_custom_fields_override(custom_fields, form, "body_#{locale}", locale) end end @@ -63,19 +69,40 @@ def admin_editor_for_proposal_body(form) safe_join [label_tabs, tabs_content] end - def render_proposal_custom_fields_override(fields, form, name, locale = nil) - custom_fields = Decidim::DecidimAwesome::CustomFields.new(fields) + def render_proposal_custom_fields_override(custom_fields, form, name, locale = nil) + # ensure decidim_editor is available as it is only required if the original FormBuilder is called + append_stylesheet_pack_tag "decidim_editor" + append_javascript_pack_tag "decidim_editor", defer: false + custom_fields.translate! - body = if form_presenter.proposal.body.is_a?(Hash) && locale.present? - form_presenter.body(extras: false, all_locales: true).with_indifferent_access[locale] + body = if name == :private_body + if form_presenter.proposal.private_body.is_a?(Hash) && locale.present? + form_presenter.private_body(extras: false, all_locales: locale.present?).with_indifferent_access[locale] + else + form_presenter.private_body(extras: false) + end + elsif form_presenter.proposal.body.is_a?(Hash) && locale.present? + form_presenter.body(extras: false, all_locales: locale.present?).with_indifferent_access[locale] else form_presenter.body(extras: false) end custom_fields.apply_xml(body) if body.present? form.object.errors.add(name, custom_fields.errors) if custom_fields.errors - render partial: "decidim/decidim_awesome/custom_fields/form_render", locals: { spec: custom_fields.to_json, form: form, name: name } + editor_image = Decidim::EditorImage.new + editor_options = form.send(:editor_options, editor_image, { context: "participant", lines: 10 }) + editor_upload = form.send(:editor_upload, editor_image, editor_options[:upload]) + render partial: "decidim/decidim_awesome/custom_fields/form_render", + locals: { spec: custom_fields.to_json, editor_options: editor_options, editor_upload: editor_upload, form: form, name: name } + end + + def awesome_proposal_custom_fields_for(name) + if name == :private_body + Decidim::DecidimAwesome::CustomFields.new(awesome_proposal_private_custom_fields) + else + Decidim::DecidimAwesome::CustomFields.new(awesome_proposal_custom_fields) + end end end end diff --git a/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb b/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb index d372fc4ab..d9590a4a6 100644 --- a/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +++ b/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb @@ -32,8 +32,8 @@ def menus # returns only non :disabled vars in config def enabled_configs(vars) - vars.filter do |var| - config_enabled? var + vars.filter do |conf| + config_enabled?(conf) end end diff --git a/app/helpers/decidim/decidim_awesome/amendments_helper_override.rb b/app/helpers/decidim/decidim_awesome/amendments_helper_override.rb deleted file mode 100644 index 009452759..000000000 --- a/app/helpers/decidim/decidim_awesome/amendments_helper_override.rb +++ /dev/null @@ -1,48 +0,0 @@ -# frozen_string_literal: true - -module Decidim - module DecidimAwesome - module AmendmentsHelperOverride - extend ActiveSupport::Concern - - included do - # original method - alias_method :decidim_amendments_form_field_for, :amendments_form_field_for - - # override with custom fields if scope applies - def amendments_form_field_for(attribute, form, original_resource) - custom_fields = awesome_custom_fields(attribute, form) - return decidim_amendments_form_field_for(attribute, form, original_resource) if custom_fields.blank? - - render_amendment_custom_fields_override(custom_fields, attribute, form, original_resource) - end - - private - - def render_amendment_custom_fields_override(fields, attribute, form, original_resource) - custom_fields = Decidim::DecidimAwesome::CustomFields.new(fields) - custom_fields.translate! - body = amendments_form_fields_value(original_resource, attribute) - custom_fields.apply_xml(body) if body.present? - # TODO: find a way to add errors as form is not the parent form - # form.object.errors.add(attribute, custom_fields.errors) if custom_fields.errors - render partial: "decidim/decidim_awesome/custom_fields/form_render", locals: { spec: custom_fields.to_json, form: form, name: attribute } - end - - # Amendments don't use a URL specifying participatory space and component - # context for awesome config constraints must be obtained from the resource - def awesome_custom_fields(attribute, _form) - return unless attribute == :body - - component = amendable.try(:component) - return unless component - return if component.settings.participatory_texts_enabled? - - awesome_config = Decidim::DecidimAwesome::Config.new(component.organization) - awesome_config.context_from_component(component) - awesome_config.collect_sub_configs_values("proposal_custom_field") - end - end - end - end -end diff --git a/app/models/concerns/decidim/decidim_awesome/has_proposal_extra_fields.rb b/app/models/concerns/decidim/decidim_awesome/has_proposal_extra_fields.rb index 626ce988d..ec1afcbf6 100644 --- a/app/models/concerns/decidim/decidim_awesome/has_proposal_extra_fields.rb +++ b/app/models/concerns/decidim/decidim_awesome/has_proposal_extra_fields.rb @@ -6,10 +6,31 @@ module HasProposalExtraFields extend ActiveSupport::Concern included do - has_one :extra_fields, foreign_key: "decidim_proposal_id", class_name: "Decidim::DecidimAwesome::ProposalExtraField", dependent: :destroy + has_one :extra_fields, as: :proposal, foreign_key: "decidim_proposal_id", foreign_type: "decidim_proposal_type", class_name: "Decidim::DecidimAwesome::ProposalExtraField", + dependent: :destroy + + after_save do |proposal| + if proposal.extra_fields && proposal.extra_fields.changed? + proposal.extra_fields.save + proposal.update_vote_weights + proposal.reload + end + end + + delegate :private_body=, to: :safe_extra_fields + + def private_body + extra_fields.private_body if extra_fields + end + + def update_private_body!(private_body) + safe_extra_fields.private_body = private_body + safe_extra_fields.save! + self.extra_fields = safe_extra_fields + end def weight_count(weight) - (extra_fields && extra_fields.vote_weight_totals[weight.to_s]) || 0 + safe_extra_fields.vote_weight_totals[weight.to_s] || 0 end def vote_weights @@ -24,19 +45,27 @@ def all_vote_weights @all_vote_weights ||= self.class.all_vote_weights_for(component) end - def update_vote_weights! - extra_fields ||= Decidim::DecidimAwesome::ProposalExtraField.find_or_initialize_by(proposal: self) - extra_fields.vote_weight_totals = {} + def update_vote_weights + votes = Decidim::Proposals::ProposalVote.where(proposal: self) + safe_extra_fields.vote_weight_totals = {} votes.each do |vote| - extra_fields.vote_weight_totals[vote.weight] ||= 0 - extra_fields.vote_weight_totals[vote.weight] += 1 + safe_extra_fields.vote_weight_totals[vote.weight] ||= 0 + safe_extra_fields.vote_weight_totals[vote.weight] += 1 end - extra_fields.save! - self.extra_fields = extra_fields @vote_weights = nil @all_vote_weights = nil end + def update_vote_weights! + update_vote_weights + safe_extra_fields.save! + self.extra_fields = safe_extra_fields + end + + def safe_extra_fields + @safe_extra_fields ||= (persisted? && reload.extra_fields) || build_extra_fields(vote_weight_totals: {}) + end + # collects all different weights stored along the different proposals in a different component def self.all_vote_weights_for(component) Decidim::DecidimAwesome::VoteWeight.where( diff --git a/app/models/decidim/decidim_awesome/proposal_extra_field.rb b/app/models/decidim/decidim_awesome/proposal_extra_field.rb index d64eb9208..0d6fc415c 100644 --- a/app/models/decidim/decidim_awesome/proposal_extra_field.rb +++ b/app/models/decidim/decidim_awesome/proposal_extra_field.rb @@ -2,10 +2,29 @@ module Decidim module DecidimAwesome + # This class adds some attributes to the proposal model in a different table + # in particular, it adds a private_body field that should be encrypted + # private_body is not translatable, nor is intended to be as it won't be shown to the public class ProposalExtraField < ApplicationRecord + include Decidim::RecordEncryptor + self.table_name = "decidim_awesome_proposal_extra_fields" - belongs_to :proposal, foreign_key: "decidim_proposal_id", class_name: "Decidim::Proposals::Proposal" + belongs_to :proposal, foreign_key: "decidim_proposal_id", foreign_type: "decidim_proposal_type", polymorphic: true + + encrypt_attribute :private_body, type: :string + + # validate not more than one extra field can be associated to a proposal + # validates :proposal, uniqueness: true + validate :no_more_than_one_extra_field + + private + + def no_more_than_one_extra_field + return unless ProposalExtraField.where(proposal:).where.not(id:).exists? + + errors.add(:proposal, :invalid) + end end end end diff --git a/app/overrides/decidim/proposals/admin/proposals/show/add_private_body.html.erb.deface b/app/overrides/decidim/proposals/admin/proposals/show/add_private_body.html.erb.deface new file mode 100644 index 000000000..b88a31139 --- /dev/null +++ b/app/overrides/decidim/proposals/admin/proposals/show/add_private_body.html.erb.deface @@ -0,0 +1,7 @@ + + +<% if awesome_proposal_custom_fields.blank? %> + <%= simple_format(present(proposal).body(strip_tags: true)) %> +<% else %> + <%= render_proposal_body(proposal) %> +<% end %> diff --git a/app/overrides/decidim/proposals/admin/proposals/show/replace_body.html.erb.deface b/app/overrides/decidim/proposals/admin/proposals/show/replace_body.html.erb.deface new file mode 100644 index 000000000..8240b3b89 --- /dev/null +++ b/app/overrides/decidim/proposals/admin/proposals/show/replace_body.html.erb.deface @@ -0,0 +1,5 @@ + + +<% unless awesome_proposal_private_custom_fields.blank? %> + <%= render partial: "decidim/decidim_awesome/admin/proposals/private_body", locals: { proposal: proposal } %> +<% end %> diff --git a/app/packs/src/decidim/decidim_awesome/admin/auto_edit.js b/app/packs/src/decidim/decidim_awesome/admin/auto_edit.js index faa9fc668..ecc5f89c9 100644 --- a/app/packs/src/decidim/decidim_awesome/admin/auto_edit.js +++ b/app/packs/src/decidim/decidim_awesome/admin/auto_edit.js @@ -1,82 +1,109 @@ -$(() => { +document.addEventListener("DOMContentLoaded", () => { let CustomFieldsBuilders = window.CustomFieldsBuilders || []; - $("body").on("click", "a.awesome-auto-edit", (ev) => { - ev.preventDefault(); - const $link = $(ev.currentTarget); - const scope = $link.data("scope"); - const $target = $(`span.awesome-auto-edit[data-scope="${scope}"]`); - const $constraints = $(`.constraints-editor[data-key="${scope}"]`); - if ($target.length === 0) { - return; - } + document.querySelectorAll("a.awesome-auto-edit").forEach((link) => { + link.addEventListener("click", (ev) => { + ev.preventDefault(); + const scope = link.dataset.scope; + const target = document.querySelector(`span.awesome-auto-edit[data-scope="${scope}"]`); + const constraints = document.querySelector(`.constraints-editor[data-key="${scope}"]`); - const key = $target.data("key"); - const attribute = $target.data("var"); - const $hidden = $(`[name="config[${attribute}][${key}]"]`); - const $multiple = $(`[name="config[${attribute}][${key}][]"]`); - const $container = $(`.${attribute}_container[data-key="${key}"]`); - const $delete = $(".delete-box", $container); - - const rebuildLabel = (text, withScope) => { - $target.text(text); - $target.attr("data-key", text); - $target.data("key", text); - if (withScope) { - $target.attr("data-scope", withScope); - $target.data("scope", withScope); - $link.attr("data-scope", withScope); - $link.data("scope", withScope); + if (!target) { + return; } - $link.show(); - }; - const rebuildHmtl = (result) => { - rebuildLabel(result.key, result.scope); - $constraints.replaceWith(result.html); - // update hidden input if exists - $hidden.attr("name", `config[${attribute}][${result.key}]`); - $multiple.attr("name", `config[${attribute}][${result.key}][]`); - $container.data("key", result.key); - $container.attr("data-key", result.key); - $delete.attr("href", $delete.attr("href").replace(`key=${key}`, `key=${result.key}`)) - CustomFieldsBuilders.forEach((builder) => { - if (builder.key === key) { - builder.key = result.key; + const key = target.dataset.key; + const attribute = target.dataset.var; + const inputField = document.querySelector(`[name="config[${attribute}][${key}]"]`); + const multipleField = document.querySelector(`[name="config[${attribute}][${key}][]"]`); + const container = document.querySelector(`.js-box-container[data-key="${key}"]`); + const deleteBox = container.querySelector(".awesome-auto-delete"); + + const rebuildLabel = (text, withScope) => { + target.innerText = text; + target.dataset.key = text; + if (withScope) { + target.dataset.scope = withScope; + link.dataset.scope = withScope; } - }); - }; + link.style.display = ""; + }; + + const rebuildHtml = (result) => { + rebuildLabel(result.key, result.scope); + constraints.outerHTML = result.html; + if (inputField) { + inputField.setAttribute("name", `config[${attribute}][${result.key}]`); + } + if (multipleField) { + multipleField.setAttribute("name", `config[${attribute}][${result.key}][]`); + } + container.dataset.key = result.key; + container.setAttribute("data-key", result.key); + deleteBox.setAttribute("href", deleteBox.getAttribute("href").replace(`key=${key}`, `key=${result.key}`)); + CustomFieldsBuilders.forEach((builder) => { + if (builder.key === key) { + builder.key = result.key; + } + }); + // Reinitialize Decidim DOM events + // console.log("Reinitializing Decidim DOM events", "constraints", constraints, "container", container); + // Remove existing dialogs + Reflect.deleteProperty(window.Decidim.currentDialogs, `edit-modal-${scope}`); + Reflect.deleteProperty(window.Decidim.currentDialogs, `new-modal-${scope}`); + const editModal = document.getElementById(`edit-modal-${result.scope}`); + const newModal = document.getElementById(`new-modal-${result.scope}`); + if (container) { + // reloads dialogs (modals) + document.dispatchEvent(new CustomEvent("ajax:loaded", { detail: container })); + } + // Rebuild the manual handling of remote modals + document.dispatchEvent(new CustomEvent("ajax:loaded:modals", { detail: [editModal, newModal] })); + }; - $target.html(``); - const $input = $(`input.awesome-auto-edit[data-scope="${scope}"]`); - $link.hide(); - $input.select(); - $input.on("keypress", (evt) => { - if (evt.code === "Enter" || evt.code === "13" || evt.code === "10") { - evt.preventDefault(); - $.ajax( - { - type: "POST", - url: window.DecidimAwesome.rename_scope_label_path, - dataType: "json", + target.innerHTML = ``; + const input = target.querySelector(`input.awesome-auto-edit[data-scope="${scope}"]`); + link.style.display = "none"; + input.focus(); + let config = {}; + config[attribute] = true; + let token = document.querySelector('meta[name="csrf-token"]'); + input.addEventListener("keypress", (evt) => { + if (evt.key === "Enter" || evt.keyCode === 13 || evt.keyCode === 10) { + if (key === input.value) { + rebuildLabel(key); + return; + } + // console.log("Saving key", key, "to", input.value, "with scope", scope); + evt.preventDefault(); + fetch(window.DecidimAwesome.renameScopeLabelPath, { + method: "POST", headers: { - "X-CSRF-Token": $("meta[name=csrf-token]").attr("content") + "Accept": "application/json, text/plain, */*", + "Content-Type": "application/json", + "X-CSRF-Token": token && token.getAttribute("content") }, - data: { key: key, - scope: scope, - attribute: attribute, - text: $input.val() - } + body: JSON.stringify({ key: key, scope: scope, attribute: attribute, text: input.value, config: config }) }). - done((result) => rebuildHmtl(result)). - fail((err) => { - console.error("Error saving key", key, "ERR:", err); - rebuildLabel(key); - }); - } - }); - $input.on("blur", () => { - rebuildLabel(key); + then((response) => { + if (!response.ok) { + throw response; + } + return response.json() + }). + then((result) => { + rebuildHtml(result) + }). + catch((err) => { + console.error("Error saving key", key, "ERR:", err); + rebuildLabel(key); + }); + } + }); + + input.addEventListener("blur", () => { + rebuildLabel(key); + }); }); }); }); diff --git a/app/packs/src/decidim/decidim_awesome/admin/custom_fields_builder.js b/app/packs/src/decidim/decidim_awesome/admin/custom_fields_builder.js index 2356aeb9b..4bfc3eb2d 100644 --- a/app/packs/src/decidim/decidim_awesome/admin/custom_fields_builder.js +++ b/app/packs/src/decidim/decidim_awesome/admin/custom_fields_builder.js @@ -6,16 +6,18 @@ window.CustomFieldsBuilders = window.CustomFieldsBuilders || []; $(() => { $(".awesome-edit-config .proposal_custom_fields_editor").each((_idx, el) => { const key = $(el).closest(".proposal_custom_fields_container").data("key"); + const configVar = $(el).closest(".proposal_custom_fields_container").data("var"); // DOCS: https://formbuilder.online/docs window.CustomFieldsBuilders.push({ el: el, key: key, + var: configVar, config: { i18n: { locale: "en-US", location: "https://cdn.jsdelivr.net/npm/formbuilder-languages@1.1.0/" }, - formData: $(`input[name="config[proposal_custom_fields][${key}]"]`).val(), + formData: $(`input[name="config[${configVar}][${key}]"]`).val(), disableFields: ["button", "file"], disabledActionButtons: ["save", "data", "clear"], disabledAttrs: [ @@ -71,7 +73,7 @@ $(() => { $("form.awesome-edit-config").on("submit", () => { window.CustomFieldsBuilders.forEach((builder) => { - $(`input[name="config[proposal_custom_fields][${builder.key}]"]`).val(builder.instance.actions.getData("json")); + $(`input[name="config[${builder.var}][${builder.key}]"]`).val(builder.instance.actions.getData("json")); }); }); }); diff --git a/app/packs/src/decidim/decidim_awesome/editors/tabs_focus.js b/app/packs/src/decidim/decidim_awesome/editors/tabs_focus.js index 33d9da5fb..00bd57473 100644 --- a/app/packs/src/decidim/decidim_awesome/editors/tabs_focus.js +++ b/app/packs/src/decidim/decidim_awesome/editors/tabs_focus.js @@ -2,21 +2,30 @@ * When switching tabs in i18n fields, autofocus on the markdown if exists */ $(() => { - // Event launched by foundation + const reloadCustomFields = ($input) => { + // saves current data to the hidden field for the lang + window.DecidimAwesome.CustomFieldsRenderer.storeData(); + // init the current language + window.DecidimAwesome.CustomFieldsRenderer.init($input); + }; + + // Event launched by foundation using jQuery (still used in the admin in v0.28, probably removed in the future) $("[data-tabs]").on("change.zf.tabs", (event) => { const $container = $(event.target).closest(".label--tabs").next(".tabs-content").find(".tabs-panel.is-active"); - // fix inscrybmde if present - let $input = $container.find('[name="faker-inscrybmde"]'); + // fix custom fields if present + const $input = $container.find(".proposal_custom_field:first"); if ($input.length > 0) { - $input[0].InscrybMDE.codemirror.refresh(); + reloadCustomFields($input); } + }); + + // if more than 3 languages, a select is used + $("#proposal-body-tabs").on("change", (event) => { + const $container = $($(event.target).val()); // fix custom fields if present - $input = $container.find(".proposal_custom_field:first"); + const $input = $container.find(".proposal_custom_field:first"); if ($input.length > 0) { - // saves current data to the hidden field for the lang - window.DecidimAwesome.CustomFieldsRenderer.storeData(); - // init the current language - window.DecidimAwesome.CustomFieldsRenderer.init($input); + reloadCustomFields($input); } }); }); diff --git a/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js b/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js index 8b4019183..98d7abf8d 100644 --- a/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js +++ b/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js @@ -113,6 +113,7 @@ export default class CustomFieldsRenderer { // eslint-disable-line no-unused-var $dl.append($dd); } } + // console.log("dataToXML", $dl[0].outerHTML); return `${$dl[0].outerHTML}`; } diff --git a/app/packs/src/decidim/decidim_awesome/proposals/custom_fields.js b/app/packs/src/decidim/decidim_awesome/proposals/custom_fields.js index c5846c2ba..5b3350dfb 100644 --- a/app/packs/src/decidim/decidim_awesome/proposals/custom_fields.js +++ b/app/packs/src/decidim/decidim_awesome/proposals/custom_fields.js @@ -1,22 +1,38 @@ import CustomFieldsRenderer from "src/decidim/decidim_awesome/forms/custom_fields_renderer" -window.DecidimAwesome.CustomFieldsRenderer = window.DecidimAwesome.CustomFieldsRenderer || new CustomFieldsRenderer(); - $(() => { + window.DecidimAwesome.CustomFieldsRenderer = window.DecidimAwesome.CustomFieldsRenderer || new CustomFieldsRenderer(); + window.DecidimAwesome.PrivateCustomFieldsRenderer = window.DecidimAwesome.PrivateCustomFieldsRenderer || new CustomFieldsRenderer(); + // use admin multilang specs if exists - let $el = $("proposal_custom_field:first", ".tabs-title.is-active"); - if (!$el.length) { - $el = $(".proposal_custom_field:first"); + const $public = $(".proposal_custom_field:first"); + const $private = $(".proposal_custom_field.proposal_custom_field--private_body:first"); + let $form = null; + if ($public.length) { + window.DecidimAwesome.CustomFieldsRenderer.init($public); + $form = window.DecidimAwesome.CustomFieldsRenderer.$element.closest("form"); } - window.DecidimAwesome.CustomFieldsRenderer.init($el); - - window.DecidimAwesome.CustomFieldsRenderer.$container.closest("form").on("submit", (evt) => { - if (evt.target.checkValidity()) { - // save current editor - window.DecidimAwesome.CustomFieldsRenderer.storeData(); - } else { - evt.preventDefault(); - evt.target.reportValidity(); + if ($private.length) { + window.DecidimAwesome.PrivateCustomFieldsRenderer.init($private); + if (!$form) { + $form = window.DecidimAwesome.PrivateCustomFieldsRenderer.$element.closest("form"); } - }); + } + + if ($form) { + $form.on("submit", (evt) => { + if (evt.target.checkValidity()) { + // save current editors + if ($public.length) { + window.DecidimAwesome.CustomFieldsRenderer.storeData(); + } + if ($private.length) { + window.DecidimAwesome.PrivateCustomFieldsRenderer.storeData(); + } + } else { + evt.preventDefault(); + evt.target.reportValidity(); + } + }); + } }); diff --git a/app/packs/stylesheets/decidim/decidim_awesome/admin/auto_edits.scss b/app/packs/stylesheets/decidim/decidim_awesome/admin/auto_edits.scss index b93e97052..96dfc534e 100644 --- a/app/packs/stylesheets/decidim/decidim_awesome/admin/auto_edits.scss +++ b/app/packs/stylesheets/decidim/decidim_awesome/admin/auto_edits.scss @@ -14,3 +14,29 @@ span.awesome-auto-edit { margin: 0; font-weight: 600; } + +a.awesome-auto-delete { + float: right; + @extend .button; + @extend .button__xs; + @extend .button__text-secondary; +} + +.form-defaults input[type="text"].awesome-auto-edit { + display: inline-block; + margin: 0; + padding: 2px 4px; + height: auto; + width: auto; + line-height: 1; + outline: 1px solid transparent; + font-size: 0.75rem; +} + +span.awesome-auto-edit { + background-color: $body-background; + padding: 0 0.5rem; + border-radius: $global-radius; + margin: 0; + font-weight: $global-weight-bold; +} diff --git a/app/packs/stylesheets/decidim/decidim_awesome/admin/codemirror.scss b/app/packs/stylesheets/decidim/decidim_awesome/admin/codemirror.scss index 99461c9ec..69ff09d3b 100644 --- a/app/packs/stylesheets/decidim/decidim_awesome/admin/codemirror.scss +++ b/app/packs/stylesheets/decidim/decidim_awesome/admin/codemirror.scss @@ -3,6 +3,12 @@ .awesome-edit-config { .scoped_styles_container, .proposal_custom_fields_container { + @apply bg-background; + + &.private { + @apply outline-2 outline-[#fca5a5] outline-dotted; + } + .form-error { margin: 0; } diff --git a/app/packs/stylesheets/decidim/decidim_awesome/admin/constraints.scss b/app/packs/stylesheets/decidim/decidim_awesome/admin/constraints.scss index 3f8f597eb..ec5d6c582 100644 --- a/app/packs/stylesheets/decidim/decidim_awesome/admin/constraints.scss +++ b/app/packs/stylesheets/decidim/decidim_awesome/admin/constraints.scss @@ -4,40 +4,59 @@ margin: -.5rem 0 2rem; border-radius: 5px; - .constraints-list { - padding: 0; - // margin:0 0 1em 0 ; - li { - margin: 0 1em 0 0; - padding: 0; + h5 { + font-weight: 600; + color: rgb(62 76 92 / var(--tw-text-opacity)); + font-size: 14px; + line-height: 18px; + } + + .label { + font-weight: normal; + font-size: 0.8rem; + padding: 1px 5px; + + &.participatory_space_manifest { + background-color: #f7b230; + color: #000; } - .label { - &.participatory_space_manifest { - background-color: #f7b230; - } + &.participatory_space_slug { + background-color: #19b380; + color: #fff; + } - &.participatory_space_slug { - background-color: #19b380; - } + &.component_manifest { + background-color: #b31919; + color: #fff; + } - &.component_manifest { - background-color: #b31919; - } + &.component_id { + background-color: #ee449c; + color: #fff; + } - &.component_id { - background-color: #ee449c; + &.constraint { + &-none { + background-color: #ff3000; + color: #fff; } + } + } - &.constraint { - &-none { - background-color: #ff3000; - } - } + .constraints-list { + margin: 16px 20px; + padding: 0 20px 14px 33px; + list-style-type: disc; + + .button__xs { + padding: 1px 5px; + font-size: 0.8rem; } - a { - margin-left: 1rem; + li { + margin: 0 1em 0 0; + padding: 0; } &.inactive { @@ -46,4 +65,8 @@ } } } + + .flash[hidden] { + display: none; + } } diff --git a/app/packs/stylesheets/decidim/decidim_awesome/admin/custom_fields.scss b/app/packs/stylesheets/decidim/decidim_awesome/admin/custom_fields.scss index cd1281d0e..b29494fbb 100644 --- a/app/packs/stylesheets/decidim/decidim_awesome/admin/custom_fields.scss +++ b/app/packs/stylesheets/decidim/decidim_awesome/admin/custom_fields.scss @@ -9,19 +9,20 @@ &:first-child { margin-left: 0; } + $colors: ( - "primary": #{$primary}, - "secondary": #{$secondary}, - "success": #{$success}, - "warning": #{$warning}, - "alert": #{$alert}, - "highlight": #{$highlight}, - "highlight_alternative": #{$highlight_alternative} + "primary": $primary, + "secondary": $secondary, + "success": $success, + "warning": $warning, + "alert": $alert, + "highlight": $highlight, + "highlight_alternative": $highlight_alternative ); @each $name, $color in $colors { &.#{$name} { - background-color: #{$color}; + background-color: $color; } } } @@ -35,14 +36,21 @@ .proposal_custom_fields { &_editor { background-color: #e0e0e0; - padding: .5em .5em 1em; + padding: 0.5em 0.5em 1em; border-top-left-radius: 5px; border-top-right-radius: 5px; + ul.frmb, + .form-wrap.form-builder .frmb li.form-field, + .form-wrap.form-builder .stage-wrap.empty { + background-color: $body-background; + margin-right: 0.5rem; + } + label { display: inline-block; max-width: 100%; - font-weight: 600 !important; + font-weight: $global-weight-bold !important; } li[type] { @@ -72,22 +80,15 @@ color: #555; background-color: #fff; border: 1px solid #ccc; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; margin: 0; padding: 6px 12px; } } - - &_container { - .constraints-editor { - border-top-left-radius: 0; - border-top-right-radius: 0; - } - } } -// Custom fields tunning +// Custom fields tuning .rendered-form .form-control.ql-container { height: auto !important; } diff --git a/app/packs/stylesheets/decidim/decidim_awesome/forms/custom_fields.scss b/app/packs/stylesheets/decidim/decidim_awesome/forms/custom_fields.scss new file mode 100644 index 000000000..3e403b8d8 --- /dev/null +++ b/app/packs/stylesheets/decidim/decidim_awesome/forms/custom_fields.scss @@ -0,0 +1,187 @@ +.decidim_awesome-custom_fields { + &.private_body { + padding: 1.5rem 1rem; + margin-top: 2rem; + border: 1px solid $medium-gray; + border-radius: $global-radius; + background-color: $body-background; + color: $black; + font-weight: $global-weight-normal; + } + + .private_body-disclosure { + margin: -1rem 0 2rem 0; + font-size: 1.125rem; + font-style: italic; + + svg { + display: inline-block; + width: 1.5rem; + height: 1.5rem; + margin-right: 0.5rem; + vertical-align: bottom; + } + } + + dt { + font-family: $body-font-family; + font-weight: $global-weight-bold; + } + + dd { + padding: 0; + } + + .proposal_custom_field { + h1 { + font-family: $body-font-family; + font-weight: $global-weight-bold; + font-size: 2.5rem; + margin-top: 1rem; + } + + h2 { + font-family: $body-font-family; + font-weight: $global-weight-bold; + font-size: 2rem; + margin-top: 1rem; + } + + h3 { + font-family: $body-font-family; + font-weight: $global-weight-semibold; + font-size: 1.75rem; + margin-top: 1rem; + } + + h4 { + font-family: $body-font-family; + font-weight: $global-weight-semibold; + font-size: 1.5rem; + margin-top: 1rem; + } + + h5 { + font-family: $body-font-family; + font-weight: $global-weight-semibold; + font-size: 1.125rem; + margin-top: 1rem; + } + + h6 { + font-family: $body-font-family; + font-weight: $global-weight-semibold; + font-size: 1rem; + margin-top: 1rem; + } + + p { + margin-top: 1rem; + } + + label { + .tooltip-element { + margin: 0; + padding: 0; + visibility: hidden; + display: block; + + &::before { + visibility: visible; + font-size: 0.75rem; + color: $medium-gray; + font-weight: $global-weight-normal; + font-style: italic; + + content: attr(tooltip); + } + } + } + + .form-group:not(:first-of-type) { + margin-top: 1.5rem; + } + + .form-control { + width: 100%; + display: block; + margin-top: 1rem; + + &:not(.reset-defaults) { + display: inline-block; + padding: 0.5rem 1rem; + border: 1px solid $medium-gray; + outline: 1px solid transparent; + border-radius: $global-radius; + background-color: $body-background; + color: $black; + font-weight: $global-weight-normal; + placeholder { + color: $medium-gray; + } + &:focus { + outline: 2px solid $secondary-color; + } + &:disabled { + background-color: $light-gray; + color: $medium-gray; + cursor: not-allowed; + } + + &.sm { + padding: 0.25rem; + font-size: 0.875rem; + } + + &.sm-icon { + padding: 0.25rem 0.25rem 0.25rem 1.5rem; + font-size: 0.875rem; + } + + &.is-invalid-input:not(:focus) { + outline: 2px solid $alert-color; + } + } + + &:not(select) { + &:read-only { + background-color: $light-gray; + border: 0; + color: $medium-gray; + } + } + } + + .formbuilder-checkbox { + > label { + font-weight: $global-weight-normal; + } + } + + .formbuilder-autocomplete { + position: relative; + + .formbuilder-autocomplete-list { + z-index: 20; + max-height: 13rem; + outline: 1px solid transparent; + border-radius: $global-radius; + border: 1px solid $medium-gray; + color: $black; + font-weight: $global-weight-normal; + display: none; + + li { + cursor: pointer; + border-radius: $global-radius; + padding: 0.5rem 1rem; + background-color: $body-background; + + &.active-option { + background-color: $light-gray; + } + } + } + } + } +} diff --git a/app/permissions/decidim/decidim_awesome/admin/permissions.rb b/app/permissions/decidim/decidim_awesome/admin/permissions.rb index cef8d2eb2..e0d446b61 100644 --- a/app/permissions/decidim/decidim_awesome/admin/permissions.rb +++ b/app/permissions/decidim/decidim_awesome/admin/permissions.rb @@ -18,7 +18,7 @@ def permissions toggle_allow(DecidimAwesome.admin_accountability.include?(:participatory_space_roles)) end elsif permission_action.action == :edit_config - toggle_allow(config_enabled?(permission_action.subject)) + toggle_allow(config_enabled?(*permission_action.subject)) end permission_action diff --git a/app/presenters/concerns/decidim/decidim_awesome/breadcrumb_root_menu_item_presenter_override.rb b/app/presenters/concerns/decidim/decidim_awesome/breadcrumb_root_menu_item_presenter_override.rb new file mode 100644 index 000000000..a393cc44c --- /dev/null +++ b/app/presenters/concerns/decidim/decidim_awesome/breadcrumb_root_menu_item_presenter_override.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + module BreadcrumbRootMenuItemPresenterOverride + extend ActiveSupport::Concern + + included do + def arrow_link(text, url, args = {}) + link_to url, extended_html_options.merge(class: args.with_indifferent_access[:class]) do + "#{text} #{icon("arrow-right-line")}".html_safe + end + end + + def extended_html_options + {}.tap do |opts| + opts[:target] = "_blank" if @menu_item.try(:target) == "_blank" + end + end + end + end + end +end diff --git a/app/presenters/decidim/decidim_awesome/menu_item_presenter_override.rb b/app/presenters/concerns/decidim/decidim_awesome/menu_item_presenter_override.rb similarity index 100% rename from app/presenters/decidim/decidim_awesome/menu_item_presenter_override.rb rename to app/presenters/concerns/decidim/decidim_awesome/menu_item_presenter_override.rb diff --git a/app/presenters/decidim/decidim_awesome/menu_presenter_override.rb b/app/presenters/concerns/decidim/decidim_awesome/menu_presenter_override.rb similarity index 100% rename from app/presenters/decidim/decidim_awesome/menu_presenter_override.rb rename to app/presenters/concerns/decidim/decidim_awesome/menu_presenter_override.rb diff --git a/app/presenters/concerns/decidim/decidim_awesome/proposals/proposal_presenter_override.rb b/app/presenters/concerns/decidim/decidim_awesome/proposals/proposal_presenter_override.rb new file mode 100644 index 000000000..ddc0de0d3 --- /dev/null +++ b/app/presenters/concerns/decidim/decidim_awesome/proposals/proposal_presenter_override.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + module Proposals + ## + # Override Proposal Presenter to access private field. + module ProposalPresenterOverride + extend ActiveSupport::Concern + included do + def private_body(*) + return unless proposal + + proposal.private_body + end + end + end + end + end +end diff --git a/app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_methods.rb b/app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_methods.rb new file mode 100644 index 000000000..e1730ee50 --- /dev/null +++ b/app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_methods.rb @@ -0,0 +1,72 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + module Proposals + # Adds one custom field per column in export if custom fields are activted + # Adds vote weights + module ProposalSerializerMethods + extend ActiveSupport::Concern + + included do + include ::Decidim::DecidimAwesome::NeedsAwesomeConfig + + # Override the NeedsAwesomeConfig's awesome_config_instance, + # to take context from proposal instead of controller's request. + def awesome_config_instance + return @custom_config if @custom_config + + @custom_config = Config.new(proposal.organization) + @custom_config.context_from_component(proposal.component) + @custom_config + end + + def serialize_custom_fields + payload = {} + custom_fields = CustomFields.new(awesome_proposal_custom_fields) + if custom_fields.present? + @proposal.body.each do |locale, body| + if body.is_a?(Hash) + body.each do |translation_locale, value| + fields_entries(custom_fields, value) do |field_key, field_value| + payload["body/#{field_key}/#{translation_locale}".to_sym] = field_value if payload["body/#{field_key}/#{translation_locale}".to_sym].blank? + end + end + else + fields_entries(custom_fields, body) do |key, value| + payload["body/#{key}/#{locale}".to_sym] = value + end + end + end + end + payload + end + + def serialize_private_custom_fields + payload = {} + private_custom_fields = CustomFields.new(awesome_proposal_private_custom_fields) + if private_custom_fields.present? + fields_entries(private_custom_fields, proposal.private_body) do |key, value| + value = value.first if value.is_a? Array + payload["private_body/#{key}".to_sym] = value + end + end + payload + end + + # Iterate on custom fields that has a label and name + # (will ignore paragraphs and title) + def fields_entries(custom_fields, body) + custom_fields.apply_xml(body) + custom_fields.fields.each do |field| + next unless field["label"].present? && field.has_key?("name") + + value = field["userData"].is_a?(Array) ? field["userData"].first : field["userData"] + yield field["label"].parameterize, value + end + end + end + end + end + end +end diff --git a/app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_override.rb b/app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_override.rb new file mode 100644 index 000000000..8ddb06974 --- /dev/null +++ b/app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_override.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + module Proposals + # Adds one custom field per column in export if custom fields are activted + # Adds vote weights + module ProposalSerializerOverride + extend ActiveSupport::Concern + + included do + include ProposalSerializerMethods + + alias_method :decidim_original_serialize, :serialize + + def serialize + # serialize first the custom fields, + # as default serialization will strip proposal body's tags. + serialization = decidim_original_serialize + serialization.merge!(proposal_vote_weights) + serialization.merge!(serialize_custom_fields) + end + + protected + + def proposal_vote_weights + payload = {} + if proposal.respond_to?(:vote_weights) + proposal.update_vote_weights! + payload[:votes] = proposal.reload.vote_weights + end + payload + end + end + end + end + end +end diff --git a/app/serializers/decidim/decidim_awesome/proposals/private_proposal_serializer.rb b/app/serializers/decidim/decidim_awesome/proposals/private_proposal_serializer.rb new file mode 100644 index 000000000..1a1dc994e --- /dev/null +++ b/app/serializers/decidim/decidim_awesome/proposals/private_proposal_serializer.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + module Proposals + ## + # Custom serializer for Proposals with private data. + # Used to separate open-data export and admin export. + class PrivateProposalSerializer < ::Decidim::Proposals::ProposalSerializer + include ProposalSerializerMethods + + def serialize + serialization = super.merge!(serialize_private_custom_fields) + serialization.merge!(serialize_private_notes) + end + + def serialize_private_notes + payload = {} + notes = proposal.notes + return payload unless notes.any? + + notes.each do |note| + payload["notes/#{note.id}".to_sym] = { + created_at: note.created_at, + note: note.body, + author: author_name(note.author) + } + end + payload + end + end + end + end +end diff --git a/app/types/concerns/decidim/decidim_awesome/add_proposal_type_custom_fields.rb b/app/types/concerns/decidim/decidim_awesome/add_proposal_type_custom_fields.rb new file mode 100644 index 000000000..6b7a19027 --- /dev/null +++ b/app/types/concerns/decidim/decidim_awesome/add_proposal_type_custom_fields.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + module AddProposalTypeCustomFields + extend ActiveSupport::Concern + + included do + include ::Decidim::DecidimAwesome::NeedsAwesomeConfig + + field :body_fields, TranslatedCustomFieldsType, "Custom fields for this proposal", null: true + + def body_fields + return if custom_fields.empty? + + @body_fields ||= object.body.transform_values do |body| + sanitize_translated_fields(body) + end + end + + # Override the NeedsAwesomeConfig's awesome_config_instance, + # to take context from proposal instead of controller's request. + def awesome_config_instance + return @custom_config if @custom_config + + @custom_config = Config.new(object.organization) + @custom_config.context_from_component(object.component) + @custom_config + end + + private + + def custom_fields + @custom_fields ||= CustomFields.new(awesome_proposal_custom_fields) + end + + def fields_for_xml(body) + custom_fields.apply_xml(body) + custom_fields.fields.filter_map do |field| + next unless field["label"].present? && field.has_key?("name") + + field["userData"] = field["userData"].first if field["userData"].is_a?(Array) + field.dup + end + end + + def sanitize_translated_fields(body) + if body.is_a?(Hash) + body.transform_values do |value| + fields_for_xml(value) + end + else + fields_for_xml(body) + end + end + end + end + end +end diff --git a/app/types/concerns/decidim/decidim_awesome/proposal_type_override.rb b/app/types/concerns/decidim/decidim_awesome/add_proposal_type_vote_weights.rb similarity index 78% rename from app/types/concerns/decidim/decidim_awesome/proposal_type_override.rb rename to app/types/concerns/decidim/decidim_awesome/add_proposal_type_vote_weights.rb index 7da9c3010..1b1bddaf4 100644 --- a/app/types/concerns/decidim/decidim_awesome/proposal_type_override.rb +++ b/app/types/concerns/decidim/decidim_awesome/add_proposal_type_vote_weights.rb @@ -2,7 +2,7 @@ module Decidim module DecidimAwesome - module ProposalTypeOverride + module AddProposalTypeVoteWeights extend ActiveSupport::Concern included do @@ -10,6 +10,8 @@ module ProposalTypeOverride def vote_weights current_component = object.component + return unless current_component.current_settings.respond_to?(:votes_hidden?) + object.vote_weights unless current_component.current_settings.votes_hidden? end end diff --git a/app/views/decidim/decidim_awesome/admin/config/_autoedit_box_label.html.erb b/app/views/decidim/decidim_awesome/admin/config/_autoedit_box_label.html.erb index a6a24560f..f1244b7af 100644 --- a/app/views/decidim/decidim_awesome/admin/config/_autoedit_box_label.html.erb +++ b/app/views/decidim/decidim_awesome/admin/config/_autoedit_box_label.html.erb @@ -2,6 +2,11 @@ <%= t("config.#{var}", scope: "activemodel.attributes", id: "#{key}").html_safe %> - <%= icon_link_to "pencil", "#", t("edit_label", scope: "decidim.decidim_awesome.admin.config.form"), class: "action-icon--edit awesome-auto-edit", data: { "scope" => "#{scope}" } %> - <%= link_to t("remove", scope: "decidim.decidim_awesome.admin.config.form_#{var}"), delete_path, method: :delete, class: "float-right delete-box", data: { confirm: t("sure_to_remove", scope: "decidim.decidim_awesome.admin.config.form_#{var}") } %> + + <%= icon_link_to "pencil", "#", t("edit_label", scope: "decidim.decidim_awesome.admin.config.form"), class: "awesome-auto-edit", data: { "scope" => "#{scope}" } %> + + <%= link_to delete_path, method: :delete, class: "awesome-auto-delete", title: t("remove", scope: "decidim.decidim_awesome.admin.config.form_#{var}"), data: { confirm: t("sure_to_remove", scope: "decidim.decidim_awesome.admin.config.form_#{var}") } do %> + <%= icon "circle-x" %> + <%= t("delete", scope: "decidim.decidim_awesome.admin.config.form_#{var}") %> + <% end %> <% end %> diff --git a/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb b/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb index d015749ff..9722ae4e8 100644 --- a/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb +++ b/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb @@ -1,27 +1,39 @@ -
+
- -
<%= t ".title" %>
+
<%= t ".title" %>
<% if constraints.blank? %> <%= t ".always" %> <% end %>
    "> <% constraints&.each do |constraint| %> -
  • - <% constraint.settings.reverse_each do |k, val| %> - <%= translate_constraint_value constraint, k %> - <% end %> - <%= t ".edit" %> - <%= link_to t(".delete"), constraint_path(id: constraint.id), remote: true, method: :delete %> -
  • - <% end %> +
  • + <% constraint.settings.reverse_each do |k, val| %> + <%= translate_constraint_value constraint, k %> + <% end %> + +
    + + + <%= link_to t(".delete"), constraint_path(id: constraint.id), remote: true, method: :delete, class: "button button__xs button__transparent-primary" %> +
    +
  • + <% end %>
- <%= t ".add_condition" %> + +
+ +<%#= decidim_modal id: "edit-modal-#{key}", class: "decidim_awesome modal", remote: true %> +<%#= decidim_modal id: "new-modal-#{key}", class: "decidim_awesome modal", remote: true %> diff --git a/app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb b/app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb index f6a8a082a..863d53006 100644 --- a/app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb +++ b/app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb @@ -3,7 +3,7 @@

<%= t("help.scoped_admins", scope: "decidim.decidim_awesome.admin.config.form") %>

<% form.object.scoped_admins&.each do |key, value| %> -
+
<%= render(partial: "decidim/decidim_awesome/admin/config/autoedit_box_label", locals: { var: "scoped_admins", key: key, scope: "scoped_admin_#{key}", delete_path: decidim_admin_decidim_awesome.scoped_admin_path(key: key) }) %>

<%= errors[key.to_sym].join("
") if errors %>

diff --git a/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb b/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb index 61a17555c..8e97f41a7 100644 --- a/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb +++ b/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb @@ -1,18 +1,14 @@ -
-

<%= t("help.drag_and_drop_supported", scope: "decidim.decidim_awesome.admin.config.form") %>

-

<%= t("help.original_editor_override", scope: "decidim.decidim_awesome.admin.config.form") %>

- - <% enabled_configs([:allow_images_in_full_editor, :allow_images_in_small_editor]).each do |key| %> - <%= form.check_box key %> -

<%= t("help.#{key}", scope: "decidim.decidim_awesome.admin.config.form") %>

- - <%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: key, constraints: constraints_for(key) }) %> - <% end %> - - <% enabled_configs([:use_markdown_editor, :allow_images_in_markdown_editor]).each do |key| %> - <%= form.check_box key %> -

<%= t("help.#{key}", scope: "decidim.decidim_awesome.admin.config.form") %>

- - <%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: key, constraints: constraints_for(key) }) %> +
+
+

<%= t("help.drag_and_drop_supported", scope: "decidim.decidim_awesome.admin.config.form") %> + <%= t("help.original_editor_override", scope: "decidim.decidim_awesome.admin.config.form") %>

+
+ + <% enabled_configs([:allow_images_in_editors, :allow_videos_in_editors]).each do |key| %> +
+ <%= form.check_box key, help_text: t("help.#{key}", scope: "decidim.decidim_awesome.admin.config.form") %> + + <%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: key, constraints: constraints_for(key) }) %> +
<% end %>
diff --git a/app/views/decidim/decidim_awesome/admin/config/_form_proposal_custom_fields.html.erb b/app/views/decidim/decidim_awesome/admin/config/_form_proposal_custom_fields.html.erb index bfe55096f..729374e25 100644 --- a/app/views/decidim/decidim_awesome/admin/config/_form_proposal_custom_fields.html.erb +++ b/app/views/decidim/decidim_awesome/admin/config/_form_proposal_custom_fields.html.erb @@ -1,25 +1,43 @@ -
<%= t("caution", scope: "decidim.decidim_awesome.admin.config") %>
-
- <% if config_enabled? :proposal_custom_fields %> -

<%= t("help.proposal_custom_fields", scope: "decidim.decidim_awesome.admin.config.form") %>

-

<%= t("help.proposal_custom_fields_example", scope: "decidim.decidim_awesome.admin.config.form") %>

-

<%= t("help.proposal_custom_fields_translations", scope: "decidim.decidim_awesome.admin.config.form") %>

- - <% form.object.proposal_custom_fields&.each do |key, value| %> -
- <%= render(partial: "decidim/decidim_awesome/admin/config/autoedit_box_label", locals: { var: "proposal_custom_fields", key: key, scope: "proposal_custom_field_#{key}", delete_path: decidim_admin_decidim_awesome.proposal_custom_field_path(key: key) }) %> +<% + priv = (config_var == "proposal_private_custom_fields") + field = priv ? "proposal_private_custom_field" : "proposal_custom_field" +%> +
+ <% if config_enabled? config_var %> + <% if priv %> +
+

<%= t("help.proposal_private_custom_fields", scope: "decidim.decidim_awesome.admin.config.form") %>

+

<%= t("help.proposal_private_custom_fields_translations", + scope: "decidim.decidim_awesome.admin.config.form", + warning: content_tag(:i, t("decidim.decidim_awesome.proposal_private_custom_fields_disclosure")), + key: content_tag("code", "decidim.decidim_awesome.proposal_private_custom_fields_disclosure") + ).html_safe %>

+
+ <% else %> +
+

<%= t("help.proposal_custom_fields", scope: "decidim.decidim_awesome.admin.config.form") %>

+

<%= t("help.proposal_custom_fields_example", scope: "decidim.decidim_awesome.admin.config.form") %>

+

<%= t("help.proposal_custom_fields_translations", scope: "decidim.decidim_awesome.admin.config.form") %>

+
+ <% end %> + <% form.object.send(config_var)&.each do |key, value| %> +
js-box-container" data-key="<%= key %>" data-var="<%= config_var %>"> + <%= render("decidim/decidim_awesome/admin/config/autoedit_box_label", var: config_var, key: key, scope: "#{field}_#{key}", delete_path: decidim_admin_decidim_awesome.proposal_custom_field_path(key: key, private: priv)) %>

<%= errors[key.to_sym].join("
") if errors %>

- <%= hidden_field_tag key, value, name: "config[proposal_custom_fields][#{key}]" %> -
+ + <%= hidden_field_tag key, value, name: "config[#{config_var}][#{key}]" %> + +
">
- <%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: "proposal_custom_field_#{key}", constraints: constraints_for("proposal_custom_field_#{key}") }) %> + + <%= render("decidim/decidim_awesome/admin/config/constraints", key: "#{field}_#{key}", constraints: constraints_for("#{field}_#{key}")) %>
<% end %> - <%= link_to t(".new"), decidim_admin_decidim_awesome.proposal_custom_fields_path, method: :post %> - + <%= link_to decidim_admin_decidim_awesome.proposal_custom_fields_path(private: priv), method: :post, class: "button button__sm button__text-secondary mr-auto" do %> + <%= icon("add-box-line") %> + <%= t("new", scope: "decidim.decidim_awesome.admin.config.form_#{config_var}") %> + <% end %> <% end %>
- -<%= javascript_pack_tag "decidim_decidim_awesome_admin_form_exit_warn" %> diff --git a/app/views/decidim/decidim_awesome/admin/config/_form_proposal_private_custom_fields.html.erb b/app/views/decidim/decidim_awesome/admin/config/_form_proposal_private_custom_fields.html.erb new file mode 100644 index 000000000..6433e616d --- /dev/null +++ b/app/views/decidim/decidim_awesome/admin/config/_form_proposal_private_custom_fields.html.erb @@ -0,0 +1 @@ +<%= render "form_proposal_custom_fields", **local_assigns %> diff --git a/app/views/decidim/decidim_awesome/admin/config/_form_proposals.html.erb b/app/views/decidim/decidim_awesome/admin/config/_form_proposals.html.erb index 7cb43467c..89d9db47b 100644 --- a/app/views/decidim/decidim_awesome/admin/config/_form_proposals.html.erb +++ b/app/views/decidim/decidim_awesome/admin/config/_form_proposals.html.erb @@ -7,6 +7,94 @@ <% unless current_organization.rich_text_editor_in_public_views %> <%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: :allow_images_in_proposals, constraints: constraints_for(:allow_images_in_proposals) }) %> +
+ <% end %> + + <% if config_enabled?(:additional_proposal_sortings) %> +
+

<%= t("additional_proposal_sortings.title", scope: "decidim.decidim_awesome.admin.config.form") %>

+
+
+ <%= form.select :additional_proposal_sortings, @form.additional_proposal_sorting_labels, { include_blank: false }, { multiple: true } %> + +

<%= t("additional_proposal_sortings.help", scope: "decidim.decidim_awesome.admin.config.form") %> <%= link_to t("additional_proposal_sortings.enable_all", scope: "decidim.decidim_awesome.admin.config.form"), "#", id: "additional_proposal_sortings-enable-all" %>.

+ + <%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: :additional_proposal_sortings, constraints: constraints_for(:additional_proposal_sortings) }) %> +
+ <% end %> + + <% if config_enabled?(:validate_title_min_length, :validate_title_max_caps_percent, :validate_title_max_marks_together, :validate_title_start_with_caps) %> +
+

<%= t("validators.title", scope: "decidim.decidim_awesome.admin.config.form") %>

+
+ <% if config_enabled? :validate_title_start_with_caps %> +
+ <%= form.check_box :validate_title_start_with_caps %> + + <%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: :validate_title_start_with_caps, constraints: constraints_for(:validate_title_start_with_caps) }) %> +
+ <% end %> + + <% if config_enabled?(:validate_title_min_length) %> +
+ <%= form.number_field :validate_title_min_length, help_text: t("help.validate_title_min_length", scope: "decidim.decidim_awesome.admin.config.form") %> + + <%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: :validate_title_min_length, constraints: constraints_for(:validate_title_min_length) }) %> +
+ <% end %> + + <% if config_enabled?(:validate_title_max_caps_percent) %> +
+ <%= form.number_field :validate_title_max_caps_percent, help_text: t("help.validate_title_max_caps_percent", scope: "decidim.decidim_awesome.admin.config.form") %> + + <%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: :validate_title_max_caps_percent, constraints: constraints_for(:validate_title_max_caps_percent) }) %> +
+ <% end %> + + <% if config_enabled?(:validate_title_max_marks_together) %> +
+ <%= form.number_field :validate_title_max_marks_together, help_text: t("help.validate_title_max_marks_together", scope: "decidim.decidim_awesome.admin.config.form") %> + + <%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: :validate_title_max_marks_together, constraints: constraints_for(:validate_title_max_marks_together) }) %> +
+ <% end %> + <% end %> + + <% if config_enabled?(:validate_body_min_length, :validate_body_max_caps_percent, :validate_body_max_marks_together, :validate_body_start_with_caps) %> +
+

<%= t("validators.body", scope: "decidim.decidim_awesome.admin.config.form") %>

+
+ + <% if config_enabled?(:validate_body_start_with_caps) %> +
+ <%= form.check_box :validate_body_start_with_caps %> + + <%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: :validate_body_start_with_caps, constraints: constraints_for(:validate_body_start_with_caps) }) %> +
+ <% end %> + + <% if config_enabled?(:validate_body_min_length) %> +
+ <%= form.number_field :validate_body_min_length, help_text: t("help.validate_body_min_length", scope: "decidim.decidim_awesome.admin.config.form") %> + + <%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: :validate_body_min_length, constraints: constraints_for(:validate_body_min_length) }) %> +
+ <% end %> + + <% if config_enabled?(:validate_body_max_caps_percent) %> +
+ <%= form.number_field :validate_body_max_caps_percent, help_text: t("help.validate_body_max_caps_percent", scope: "decidim.decidim_awesome.admin.config.form") %> + + <%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: :validate_body_max_caps_percent, constraints: constraints_for(:validate_body_max_caps_percent) }) %> +
+ <% end %> + + <% if config_enabled?(:validate_body_max_marks_together) %> +
+ <%= form.number_field :validate_body_max_marks_together, help_text: t("help.validate_body_max_marks_together", scope: "decidim.decidim_awesome.admin.config.form") %> + + <%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: :validate_body_max_marks_together, constraints: constraints_for(:validate_body_max_marks_together) }) %> +
<% end %> <% end %>
diff --git a/app/views/decidim/decidim_awesome/admin/config/_form_styles.html.erb b/app/views/decidim/decidim_awesome/admin/config/_form_styles.html.erb index 248a1bddf..8d29c33c7 100644 --- a/app/views/decidim/decidim_awesome/admin/config/_form_styles.html.erb +++ b/app/views/decidim/decidim_awesome/admin/config/_form_styles.html.erb @@ -10,7 +10,7 @@

<% form.object.scoped_styles&.each do |key, value| %> -
+
<%= render(partial: "decidim/decidim_awesome/admin/config/autoedit_box_label", locals: { var: "scoped_styles", key: key, scope: "scoped_style_#{key}", delete_path: decidim_admin_decidim_awesome.scoped_style_path(key: key) }) %>

<%= errors[key.to_sym].join("
") if errors %>

<%= text_area_tag key, value, name: "config[scoped_styles][#{key}]", rows: 5 %> diff --git a/app/views/decidim/decidim_awesome/admin/config/show.html.erb b/app/views/decidim/decidim_awesome/admin/config/show.html.erb index a1f757420..02fa7597b 100644 --- a/app/views/decidim/decidim_awesome/admin/config/show.html.erb +++ b/app/views/decidim/decidim_awesome/admin/config/show.html.erb @@ -1,14 +1,14 @@ -<%= decidim_form_for(@form, method: :patch, url: decidim_admin_decidim_awesome.config_path(config_var), html: { class: "awesome-edit-config" }, data: { "safe-path" => decidim_admin_decidim_awesome.config_path(config_var) }) do |f| %> -
-
-

<%= t(".title", setting: config_var) %>

-
+
+

<%= t(".title", setting: config_var) %>

+
+
+ <%= decidim_form_for(@form, method: :patch, url: decidim_admin_decidim_awesome.config_path(config_var), html: { class: "form-defaults awesome-edit-config" }, data: { "safe-path" => decidim_admin_decidim_awesome.config_path(config_var) }) do |f| %>
- <%= render partial: "form_#{config_var}", locals: { form: f, errors: defined?(errors) ? errors : nil } %> + <%= render "form_#{config_var}", form: f, errors: defined?(errors) ? errors : nil %> +
+ +
+ <%= f.submit t(".update") %>
-
-
- <%= f.submit t(".update") %> -
-<% end %> -<%= render partial: "modal" %> + <% end %> +
diff --git a/app/views/decidim/decidim_awesome/admin/proposals/_editor.html.erb b/app/views/decidim/decidim_awesome/admin/proposals/_editor.html.erb index 00d699287..8eacd096a 100644 --- a/app/views/decidim/decidim_awesome/admin/proposals/_editor.html.erb +++ b/app/views/decidim/decidim_awesome/admin/proposals/_editor.html.erb @@ -1,6 +1,9 @@ -<%= admin_editor_for_proposal_body(form) %> -<% unless awesome_proposal_custom_fields.blank? %> -
-
-
+<% if Decidim::DecidimAwesome.enabled?(:proposal_custom_fields) && editor = admin_editor_for_proposal_body(form) %> + <%= editor %> +<% else %> + <%= form.translated :editor, :body, hashtaggable: true, aria: { label: :body } %> +<% end %> + +<% if Decidim::DecidimAwesome.enabled?(:proposal_private_custom_fields) && private_custom_fields = awesome_proposal_custom_fields_for(:private_body) %> + <%= render_proposal_custom_fields_override(private_custom_fields, form, :private_body) if private_custom_fields.present? %> <% end %> diff --git a/app/views/decidim/decidim_awesome/admin/proposals/_private_body.html.erb b/app/views/decidim/decidim_awesome/admin/proposals/_private_body.html.erb new file mode 100644 index 000000000..154b1be6f --- /dev/null +++ b/app/views/decidim/decidim_awesome/admin/proposals/_private_body.html.erb @@ -0,0 +1,13 @@ +
+ +
+
+ <%= Decidim::ContentProcessor.render_without_format(render_sanitized_content(proposal, :private_body)).html_safe %> +
+
+
diff --git a/app/views/decidim/decidim_awesome/custom_fields/_form_render.html.erb b/app/views/decidim/decidim_awesome/custom_fields/_form_render.html.erb index 47c9ac3c0..729f076d8 100644 --- a/app/views/decidim/decidim_awesome/custom_fields/_form_render.html.erb +++ b/app/views/decidim/decidim_awesome/custom_fields/_form_render.html.erb @@ -1,5 +1,10 @@ -
"> -
+
+ <% if name == :private_body %> +

<%= icon "spy" %><%= t("decidim.decidim_awesome.proposal_private_custom_fields_disclosure") %>

+ <% end %> +
"> +
+
<%= form.hidden_field name %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 932030195..60be83f79 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -24,6 +24,7 @@ en: intergram_use_floating_button: If checked, the closed chat is always a button instead of a text proposal_custom_fields: Custom fields %{id} + proposal_private_custom_fields: Private Custom fields %{id} scoped_admins: Scoped admins group %{id} scoped_styles: Custom styles %{id} use_markdown_editor: Use a Markdown editor instead of the HTML editor @@ -56,8 +57,6 @@ en: target: Opens in url: URL visibility: Visibility - proposal: - proposal_custom_fields: Custom fields decidim: admin: filters: @@ -300,6 +299,13 @@ en: instead of \"Address\"\nOr use your own keys in combination with other tools to define translations (eg: using the module Term Customizer):\n - \"myapp.custom_fields.bio\" instead of \"Biography\"" + proposal_private_custom_fields: Similar as public fields, but this information + won't be disclosed publicly (only admins will have access to it). + proposal_private_custom_fields_translations: | + Private custom fields are displayed in distinct box with this information text: + %{warning} + This text can be customized with a custom translation by using the key: + %{key} scoped_admins: Promote regular user to admins that can only administrate certain parts of the public web (use the restrictions editor for that). Note that users who already have regular admin permissions will be @@ -329,15 +335,23 @@ en: body: User input validations for the "body" field title: User input validations for the "title" field form_proposal_custom_fields: + delete: Delete new: Add a new "custom fields" box remove: Remove this "custom fields" box sure_to_remove: Are you sure you want to destroy this fields box? + form_proposal_private_custom_fields: + delete: Delete + new: Add a new "private custom fields" box + remove: Remove this "private custom fields" box + sure_to_remove: Are you sure you want to destroy this private fields box? form_scoped_admins: + delete: Delete new: Add a new "Scoped Admins" group remove: Remove this "Scoped Admins" group sure_to_remove: Are you sure you want to destroy this "Scoped Admins" group? form_scoped_styles: + delete: Delete new: Add a new CSS box remove: Remove this CSS box sure_to_remove: Are you sure you want to destroy this CSS box? @@ -350,6 +364,18 @@ en: title: Tweaks for %{setting} update: Update configuration system: Everywhere except participatory spaces + title: + admins: Scoped Admins + checks: System Compatibility + custom_redirects: Custom Redirections + editors: Editor Hacks + livechat: Live Chat + menu_hacks: Menu Tweaks + proposal_custom_fields: 'Proposals Custom Fields: Public fields' + proposal_private_custom_fields: 'Proposals Custom Fields: Private fields' + proposals: Proposals Hacks + styles: Custom Styles + surveys: Surveys & Forms update: error: Error updating configuration! %{error} success: Configuration updated successfully @@ -458,6 +484,11 @@ en: success: Menu item updated successfully url_exists: The same URL is already configured, please edit that instead of creating it again. + proposal_custom_fields: + menu: + title: Public fields + private_body: Private body + proposal_private_custom_fields: Private fields amendments: modal: current_amendment_html:

You can access the @@ -528,6 +559,7 @@ en: show: view_meeting: View meeting view_proposal: View proposal + proposal_private_custom_fields_disclosure: This information won't be published validators: too_much_caps: Is using too many capital letters (over %{percent}% of the text) @@ -557,6 +589,9 @@ en: weight_3: Green weight_3_short: 'G:' proposals: + admin: + exports: + awesome_private_proposals: Proposals with private data proposals: orders: az: A-Z (Alphabetical) diff --git a/db/migrate/20240531224204_add_decidim_awesome_proposal_private_fields.rb b/db/migrate/20240531224204_add_decidim_awesome_proposal_private_fields.rb new file mode 100644 index 000000000..ea86f0615 --- /dev/null +++ b/db/migrate/20240531224204_add_decidim_awesome_proposal_private_fields.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +class AddDecidimAwesomeProposalPrivateFields < ActiveRecord::Migration[6.0] + class ProposalExtraField < ApplicationRecord + self.table_name = :decidim_awesome_proposal_extra_fields + end + + def change + add_column :decidim_awesome_proposal_extra_fields, :private_body, :string + add_column :decidim_awesome_proposal_extra_fields, :decidim_proposal_type, :string + reversible do |direction| + direction.up do + execute <<~SQL.squish + UPDATE decidim_awesome_proposal_extra_fields + SET decidim_proposal_type = 'Decidim::Proposals::Proposal' + SQL + end + end + + remove_index :decidim_awesome_proposal_extra_fields, name: "decidim_awesome_extra_fields_on_proposal" + add_index :decidim_awesome_proposal_extra_fields, + [:decidim_proposal_id, :decidim_proposal_type], + name: "index_decidim_awesome_proposal_extra_fields_on_decidim_proposal" + + change_column_null :decidim_awesome_proposal_extra_fields, :decidim_proposal_id, false + change_column_null :decidim_awesome_proposal_extra_fields, :decidim_proposal_type, false + ProposalExtraField.reset_column_information + end +end diff --git a/examples/private_custom_fields.png b/examples/private_custom_fields.png new file mode 100644 index 0000000000000000000000000000000000000000..5d6c86ce51ac8290d6f52a89842592bad86d865d GIT binary patch literal 121000 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%0D@8 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 literal 0 HcmV?d00001 diff --git a/lib/decidim/decidim_awesome/admin_engine.rb b/lib/decidim/decidim_awesome/admin_engine.rb index 55b4c2f6b..287bea764 100644 --- a/lib/decidim/decidim_awesome/admin_engine.rb +++ b/lib/decidim/decidim_awesome/admin_engine.rb @@ -16,7 +16,9 @@ class AdminEngine < ::Rails::Engine routes do # Add admin engine routes here resources :constraints - resources :menu_hacks, except: [:show] + resources :menus, only: [:show] do + resources :hacks, except: [:show], controller: "menu_hacks" + end resources :custom_redirects, except: [:show] resources :config, param: :var, only: [:show, :update] resources :scoped_styles, param: :var, only: [:create, :destroy] @@ -37,19 +39,32 @@ class AdminEngine < ::Rails::Engine end end - initializer "decidim_awesome.admin_menu" do + initializer "decidim_awesome.admin_menus" do + first_available = Decidim::DecidimAwesome::Menu.menus.detect { |_key, val| val.present? }&.first + Decidim.menu :admin_menu do |menu| menu.add_item :awesome_menu, I18n.t("menu.decidim_awesome", scope: "decidim.admin"), - decidim_admin_decidim_awesome.config_path(:editors), + if first_available + decidim_admin_decidim_awesome.config_path(first_available) + else + decidim_admin_decidim_awesome.checks_path + end, icon_name: "fire", position: 7.5, - active: is_active_link?(decidim_admin_decidim_awesome.config_path(:editors), :inclusive), + active: if first_available + is_active_link?(decidim_admin_decidim_awesome.config_path(first_available), :inclusive) + else + is_active_link?(decidim_admin_decidim_awesome.checks_path) + end, if: defined?(current_user) && current_user&.read_attribute("admin") end - end + # submenus + Decidim::DecidimAwesome::Menu.register_custom_fields_submenu! + Decidim::DecidimAwesome::Menu.register_menu_hacks_submenu! + Decidim::DecidimAwesome::Menu.register_awesome_admin_menu! - initializer "decidim_awesome.admin_menu" do + # user menu Decidim.menu :admin_user_menu do |menu| if DecidimAwesome.enabled? :admin_accountability menu.add_item :admin_accountability, diff --git a/lib/decidim/decidim_awesome/api/types/localized_custom_fields_type.rb b/lib/decidim/decidim_awesome/api/types/localized_custom_fields_type.rb new file mode 100644 index 000000000..180fc5f78 --- /dev/null +++ b/lib/decidim/decidim_awesome/api/types/localized_custom_fields_type.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + # This type represents a localized string in a single language. + class LocalizedCustomFieldsType < Decidim::Api::Types::BaseObject + description "Represents a particular translation of a LocalizedCustomFieldsType" + + field :locale, GraphQL::Types::String, "The standard locale of this translation.", null: false + field :fields, GraphQL::Types::JSON, "The fields of this translation.", null: true + field :machine_translated, GraphQL::Types::Boolean, "Whether this string is machine translated or not.", null: false + + def machine_translated + if object.respond_to?(:machine_translated) + object.machine_translated.present? + else + false + end + end + end + end +end diff --git a/lib/decidim/decidim_awesome/api/types/translated_custom_fields_type.rb b/lib/decidim/decidim_awesome/api/types/translated_custom_fields_type.rb new file mode 100644 index 000000000..18f42e7c3 --- /dev/null +++ b/lib/decidim/decidim_awesome/api/types/translated_custom_fields_type.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +module Decidim + module Decidim::DecidimAwesome + # This type represents a translated field in multiple languages. + class TranslatedCustomFieldsType < Decidim::Api::Types::BaseObject + description "A translated field" + + field :locales, [GraphQL::Types::String, { null: true }], description: "Lists all the locales in which this translation is available", null: true + + field :translations, [LocalizedCustomFieldsType, { null: true }], description: "All the localized custom fields for this translation.", null: false do + argument :locales, [GraphQL::Types::String], description: "A list of locales to scope the translations to.", required: false + end + + field :translation, GraphQL::Types::JSON, description: "Returns a single translation given a locale.", null: true do + argument :locale, GraphQL::Types::String, "A locale to search for", required: true + end + + def locales + (defined_translations.keys + machine_translations.keys).uniq + end + + def translation(locale: "") + display_translations[locale] + end + + def translations(locales: []) + translations = display_translations + translations = translations.slice(*locales) unless locales.empty? + + translations.map { |locale, fields| OpenStruct.new(locale:, fields:, machine_translated: defined_translations[locale].blank?) } + end + + private + + def display_translations + @display_translations ||= locales.index_with do |locale| + defined_translations[locale].presence || machine_translations[locale] + end + end + + def defined_translations + object.stringify_keys.except("machine_translations") + end + + def machine_translations + object.stringify_keys["machine_translations"]&.stringify_keys || {} + end + end + end +end diff --git a/lib/decidim/decidim_awesome/awesome.rb b/lib/decidim/decidim_awesome/awesome.rb index c7c037559..0b1a1619a 100644 --- a/lib/decidim/decidim_awesome/awesome.rb +++ b/lib/decidim/decidim_awesome/awesome.rb @@ -10,6 +10,8 @@ module DecidimAwesome autoload :MenuHacker, "decidim/decidim_awesome/menu_hacker" autoload :CustomFields, "decidim/decidim_awesome/custom_fields" autoload :VotingManifest, "decidim/decidim_awesome/voting_manifest" + autoload :TranslatedCustomFieldsType, "decidim/decidim_awesome/api/types/translated_custom_fields_type" + autoload :LocalizedCustomFieldsType, "decidim/decidim_awesome/api/types/localized_custom_fields_type" # Awesome coms with some components for participatory spaces # Currently :awesome_map and :awesome_iframe, list them here @@ -155,6 +157,9 @@ module DecidimAwesome config_accessor :proposal_custom_fields do {} end + config_accessor :proposal_private_custom_fields do + {} + end # allows to keep modifications for the main menu # can return :disabled to completly remove this feature @@ -283,7 +288,9 @@ def self.voting_registry # pass a single config var or an array of them # any non disabled match will return as true def self.possible_additional_proposal_sortings - @possible_additional_proposal_sortings ||= additional_proposal_sortings.to_a.filter_map do |sort| + return [] unless additional_proposal_sortings.is_a?(Array) + + @possible_additional_proposal_sortings ||= additional_proposal_sortings.filter_map do |sort| next unless sort.to_sym.in?([:az, :za, :supported_first, :supported_last]) sort.to_s @@ -299,9 +306,7 @@ def self.collation_for(locale) end end - def self.enabled?(config_vars) - config_vars = [config_vars] unless config_vars.respond_to?(:any?) - + def self.enabled?(*config_vars) config_vars.any? do |item| next unless config.has_key?(item.to_sym) diff --git a/lib/decidim/decidim_awesome/awesome_helpers.rb b/lib/decidim/decidim_awesome/awesome_helpers.rb index adc3233db..77c147e47 100644 --- a/lib/decidim/decidim_awesome/awesome_helpers.rb +++ b/lib/decidim/decidim_awesome/awesome_helpers.rb @@ -24,7 +24,7 @@ def awesome_config end def javascript_config_vars - awesome_config.except(:scoped_styles, :proposal_custom_fields, :scoped_admins).to_json.html_safe + awesome_config.except(:scoped_styles, :proposal_custom_fields, :proposal_private_custom_fields, :scoped_admins).to_json.html_safe end def show_public_intergram? @@ -61,6 +61,10 @@ def awesome_proposal_custom_fields @awesome_proposal_custom_fields ||= awesome_config_instance.collect_sub_configs_values("proposal_custom_field") end + def awesome_proposal_private_custom_fields + @awesome_proposal_private_custom_fields ||= awesome_config_instance.collect_sub_configs_values("proposal_private_custom_field") + end + # this will check if the current component has been configured to use a custom voting manifest def awesome_voting_manifest_for(component) return nil unless component.settings.respond_to? :awesome_voting_manifest diff --git a/lib/decidim/decidim_awesome/custom_fields.rb b/lib/decidim/decidim_awesome/custom_fields.rb index ab4420847..10833852d 100644 --- a/lib/decidim/decidim_awesome/custom_fields.rb +++ b/lib/decidim/decidim_awesome/custom_fields.rb @@ -13,6 +13,14 @@ def initialize(fields) attr_reader :fields, :xml, :errors, :data + def empty? + @fields.empty? + end + + def present? + !@fields.empty? + end + def apply_xml(xml) parse_xml(xml) map_fields! diff --git a/lib/decidim/decidim_awesome/engine.rb b/lib/decidim/decidim_awesome/engine.rb index dd79f8268..41ce0e062 100644 --- a/lib/decidim/decidim_awesome/engine.rb +++ b/lib/decidim/decidim_awesome/engine.rb @@ -4,6 +4,7 @@ require "deface" require "decidim/core" require "decidim/decidim_awesome/awesome_helpers" +require "decidim/decidim_awesome/menu" module Decidim module DecidimAwesome @@ -26,46 +27,68 @@ class Engine < ::Rails::Engine helper Decidim::LayoutHelper if respond_to?(:helper) end # Include additional helpers globally - ActionView::Base.include(Decidim::DecidimAwesome::AwesomeHelpers) + ActiveSupport.on_load(:action_view) { include Decidim::DecidimAwesome::AwesomeHelpers } # Also for cells Decidim::ViewModel.include(Decidim::DecidimAwesome::AwesomeHelpers) # Override EtiquetteValidator - EtiquetteValidator.include(Decidim::DecidimAwesome::EtiquetteValidatorOverride) if DecidimAwesome.enabled?([:validate_title_max_caps_percent, - :validate_title_max_marks_together, - :validate_title_start_with_caps, - :validate_body_max_caps_percent, - :validate_body_max_marks_together, - :validate_body_start_with_caps]) + EtiquetteValidator.include(Decidim::DecidimAwesome::EtiquetteValidatorOverride) if DecidimAwesome.enabled?(:validate_title_max_caps_percent, + :validate_title_max_marks_together, + :validate_title_start_with_caps, + :validate_body_max_caps_percent, + :validate_body_max_marks_together, + :validate_body_start_with_caps) # Custom fields need to deal with several places - if DecidimAwesome.enabled?([:proposal_custom_fields, - :validate_title_min_length, - :validate_title_max_caps_percent, - :validate_title_max_marks_together, - :validate_title_start_with_caps, - :validate_body_min_length, - :validate_body_max_caps_percent, - :validate_body_max_marks_together, - :validate_body_start_with_caps]) + if DecidimAwesome.enabled?(:proposal_custom_fields, + :proposal_private_custom_fields, + :validate_title_min_length, + :validate_title_max_caps_percent, + :validate_title_max_marks_together, + :validate_title_start_with_caps, + :validate_body_min_length, + :validate_body_max_caps_percent, + :validate_body_max_marks_together, + :validate_body_start_with_caps) Decidim::Proposals::ProposalWizardCreateStepForm.include(Decidim::DecidimAwesome::Proposals::ProposalWizardCreateStepFormOverride) end - # override user's admin property - Decidim::User.include(Decidim::DecidimAwesome::UserOverride) if DecidimAwesome.enabled?(:scoped_admins) + if DecidimAwesome.enabled?(:proposal_custom_fields, :proposal_private_custom_fields) + Decidim::Proposals::ProposalWizardCreateStepForm.include(Decidim::DecidimAwesome::Proposals::ProposalFormOverride) + Decidim::Proposals::Admin::ProposalForm.include(Decidim::DecidimAwesome::Proposals::ProposalFormOverride) + Decidim::Proposals::ProposalPresenter.include(Decidim::DecidimAwesome::Proposals::ProposalPresenterOverride) + Decidim::Proposals::CreateProposal.include(Decidim::DecidimAwesome::Proposals::CreateProposalOverride) + Decidim::Proposals::CreateCollaborativeDraft.include(Decidim::DecidimAwesome::Proposals::CreateCollaborativeDraftOverride) + Decidim::Proposals::Admin::CreateProposal.include(Decidim::DecidimAwesome::Proposals::CreateProposalOverride) + Decidim::Proposals::UpdateProposal.include(Decidim::DecidimAwesome::Proposals::UpdateProposalOverride) + Decidim::Proposals::UpdateCollaborativeDraft.include(Decidim::DecidimAwesome::Proposals::UpdateCollaborativeDraftOverride) + Decidim::Proposals::Admin::UpdateProposal.include(Decidim::DecidimAwesome::Proposals::Admin::UpdateProposalOverride) + Decidim::Proposals::ProposalType.include(Decidim::DecidimAwesome::AddProposalTypeCustomFields) + end + + if DecidimAwesome.enabled?(:proposal_custom_fields, :proposal_private_custom_fields, :weighted_proposal_voting) + # add vote weight/private_body to proposals + Decidim::Proposals::Proposal.include(Decidim::DecidimAwesome::HasProposalExtraFields) + Decidim::Proposals::CollaborativeDraft.include(Decidim::DecidimAwesome::HasProposalExtraFields) + end if DecidimAwesome.enabled?(:weighted_proposal_voting) # add vote weight to proposal vote Decidim::Proposals::ProposalVote.include(Decidim::DecidimAwesome::HasVoteWeight) - # add vote weight cache to proposal - Decidim::Proposals::Proposal.include(Decidim::DecidimAwesome::HasProposalExtraFields) - Decidim::Proposals::ProposalSerializer.include(Decidim::DecidimAwesome::ProposalSerializerOverride) - Decidim::Proposals::ProposalType.include(Decidim::DecidimAwesome::ProposalTypeOverride) - Decidim::Proposals::ProposalMCell.include(Decidim::DecidimAwesome::ProposalMCellOverride) + Decidim::Proposals::ProposalType.include(Decidim::DecidimAwesome::AddProposalTypeVoteWeights) + Decidim::Proposals::ProposalLCell.include(Decidim::DecidimAwesome::ProposalLCellOverride) end - Decidim::MenuPresenter.include(Decidim::DecidimAwesome::MenuPresenterOverride) - Decidim::MenuItemPresenter.include(Decidim::DecidimAwesome::MenuItemPresenterOverride) + # override user's admin property + Decidim::User.include(Decidim::DecidimAwesome::UserOverride) if DecidimAwesome.enabled?(:scoped_admins) + + if DecidimAwesome.enabled?(:menu, :content_block_main_menu) + Decidim::ContentBlocks::GlobalMenuCell.include(Decidim::DecidimAwesome::GlobalMenuCellOverride) + Decidim::BreadcrumbHelper.include(Decidim::DecidimAwesome::BreadcrumbHelperOverride) + Decidim::MenuPresenter.include(Decidim::DecidimAwesome::MenuPresenterOverride) + Decidim::MenuItemPresenter.include(Decidim::DecidimAwesome::MenuItemPresenterOverride) + Decidim::BreadcrumbRootMenuItemPresenter.include(Decidim::DecidimAwesome::BreadcrumbRootMenuItemPresenterOverride) + end # Late registering of components to take into account initializer values DecidimAwesome.registered_components.each do |manifest, block| @@ -78,14 +101,21 @@ class Engine < ::Rails::Engine initializer "decidim_decidim_awesome.overrides", after: "decidim.action_controller" do config.to_prepare do + # Auto-insert some csp directives + Decidim::ApplicationController.include(Decidim::DecidimAwesome::ContentSecurityPolicy) + Decidim::Admin::ApplicationController.include(Decidim::DecidimAwesome::ContentSecurityPolicy) + # redirect unauthorized scoped admins to allowed places or custom redirects if configured - Decidim::ErrorsController.include(Decidim::DecidimAwesome::NotFoundRedirect) if DecidimAwesome.enabled?([:scoped_admins, :custom_redirects]) + Decidim::ErrorsController.include(Decidim::DecidimAwesome::NotFoundRedirect) if DecidimAwesome.enabled?(:scoped_admins, :custom_redirects) # Custom fields need to deal with several places - if DecidimAwesome.enabled?(:proposal_custom_fields) + if DecidimAwesome.enabled?(:proposal_custom_fields, :proposal_private_custom_fields) Decidim::Proposals::ApplicationHelper.include(Decidim::DecidimAwesome::Proposals::ApplicationHelperOverride) Decidim::AmendmentsHelper.include(Decidim::DecidimAwesome::AmendmentsHelperOverride) end + if DecidimAwesome.enabled?(:proposal_custom_fields, :proposal_private_custom_fields, :weighted_proposal_voting) + Decidim::Proposals::ProposalSerializer.include(Decidim::DecidimAwesome::Proposals::ProposalSerializerOverride) + end if DecidimAwesome.enabled?(:weighted_proposal_voting) Decidim::Proposals::ProposalVotesController.include(Decidim::DecidimAwesome::Proposals::ProposalVotesControllerOverride) @@ -101,21 +131,61 @@ class Engine < ::Rails::Engine app.config.middleware.insert_after Decidim::Middleware::CurrentOrganization, Decidim::DecidimAwesome::CurrentConfig end - initializer "decidim_decidim_awesome.additional_proposal_sortings" do |_app| - if DecidimAwesome.enabled?(:additional_proposal_sortings) - Decidim.component_registry.find(:proposals).tap do |component| - component.settings(:global) do |settings| - settings.attribute :default_sort_order, type: :select, default: "default", choices: -> { ["default"] + DecidimAwesome.possible_additional_proposal_sortings } + initializer "decidim_decidim_awesome.additional_proposal_options" do |_app| + Decidim.component_registry.find(:proposals).tap do |component| + component.settings(:global) do |settings| + if DecidimAwesome.enabled?(:additional_proposal_sortings) + settings.attribute( + :default_sort_order, + type: :select, + default: "default", + choices: -> { (POSSIBLE_SORT_ORDERS + DecidimAwesome.possible_additional_proposal_sortings).uniq } + ) + end + if DecidimAwesome.enabled?(:allow_limiting_amendments) + DecidimAwesome.hash_append!( + settings.attributes, + :amendments_enabled, + :limit_pending_amendments, + Decidim::SettingsManifest::Attribute.new(type: :boolean, default: DecidimAwesome.allow_limiting_amendments) + ) end + end + + if DecidimAwesome.enabled?(:additional_proposal_sortings) component.settings(:step) do |settings| - settings.attribute :default_sort_order, type: :select, include_blank: true, choices: -> { ["default"] + DecidimAwesome.possible_additional_proposal_sortings } + settings.attribute( + :default_sort_order, + type: :select, + include_blank: true, + choices: -> { (POSSIBLE_SORT_ORDERS + DecidimAwesome.possible_additional_proposal_sortings).uniq } + ) end end - end - if DecidimAwesome.enabled?(:allow_limiting_amendments) - Decidim.component_registry.find(:proposals).tap do |component| - component.settings(:global) do |settings| - settings.attribute :limit_pending_amendments, type: :boolean, default: DecidimAwesome.allow_limiting_amendments + + if DecidimAwesome.enabled?(:proposal_private_custom_fields) + # Add to the "proposals" component an exporter that is not + # included in open-data to be able to export all private fields + # from the administration without exposing data to the frontend. + component.exports :awesome_private_proposals do |exports| + exports.collection do |component_instance, user| + space = component_instance.participatory_space + + collection = Decidim::Proposals::Proposal + .published + .not_hidden + .where(component: component_instance) + .includes(:scope, :category, :component) + + if space.user_roles(:valuator).where(user:).any? + collection.with_valuation_assigned_to(user, space) + else + collection + end + end + + exports.include_in_open_data = false + exports.serializer Decidim::DecidimAwesome::Proposals::PrivateProposalSerializer end end end @@ -126,9 +196,9 @@ class Engine < ::Rails::Engine # register available processors Decidim::DecidimAwesome.voting_registry.register(:voting_cards) do |voting| voting.show_vote_button_view = "decidim/decidim_awesome/voting/voting_cards/show_vote_button" - voting.show_votes_count_view = "decidim/decidim_awesome/voting/voting_cards/show_votes_count" - voting.show_votes_count_view = "" # hide votes count if needed - voting.proposal_m_cell_footer = "decidim/decidim_awesome/voting/voting_cards/proposal_m_cell_footer" + # voting.show_votes_count_view = "decidim/decidim_awesome/voting/voting_cards/show_votes_count" + voting.show_votes_count_view = "" # hide votes count if not needed (in this case is integrated in the show_vote_button_view) + voting.proposal_metadata_cell = "decidim/decidim_awesome/voting/proposal_metadata" voting.weight_validator do |weight, context| allowed = [1, 2, 3] allowed << 0 if context[:proposal]&.component&.settings&.voting_cards_show_abstain @@ -141,26 +211,43 @@ class Engine < ::Rails::Engine next unless component component.settings(:global) do |settings| - settings.attribute :awesome_voting_manifest, - type: :select, - default: "", - choices: -> { ["default"] + Decidim::DecidimAwesome.voting_registry.manifests.map(&:name) }, - readonly: lambda { |context| - Decidim::Proposals::Proposal.where(component: context[:component]).where.not(proposal_votes_count: 0).any? - } - settings.attribute :voting_cards_box_title, - type: :string, - translated: true - settings.attribute :voting_cards_show_modal_help, - type: :boolean, - default: true - settings.attribute :voting_cards_show_abstain, - type: :boolean, - default: false - settings.attribute :voting_cards_instructions, - type: :text, - translated: true, - editor: true + DecidimAwesome.hash_append!( + settings.attributes, + :can_accumulate_supports_beyond_threshold, + :awesome_voting_manifest, + Decidim::SettingsManifest::Attribute.new( + type: :select, + default: "", + choices: -> { ["default"] + Decidim::DecidimAwesome.voting_registry.manifests.map(&:name) }, + readonly: lambda { |context| + Decidim::Proposals::Proposal.where(component: context[:component]).where.not(proposal_votes_count: -Float::INFINITY..0).any? + } + ) + ) + DecidimAwesome.hash_append!( + settings.attributes, + :awesome_voting_manifest, + :voting_cards_box_title, + Decidim::SettingsManifest::Attribute.new(type: :string, translated: true) + ) + DecidimAwesome.hash_append!( + settings.attributes, + :voting_cards_box_title, + :voting_cards_show_modal_help, + Decidim::SettingsManifest::Attribute.new(type: :boolean, default: true) + ) + DecidimAwesome.hash_append!( + settings.attributes, + :voting_cards_show_modal_help, + :voting_cards_show_abstain, + Decidim::SettingsManifest::Attribute.new(type: :boolean, default: false) + ) + DecidimAwesome.hash_append!( + settings.attributes, + :voting_cards_show_abstain, + :voting_cards_instructions, + Decidim::SettingsManifest::Attribute.new(type: :text, translated: true, editor: true) + ) end end end diff --git a/lib/decidim/decidim_awesome/menu.rb b/lib/decidim/decidim_awesome/menu.rb new file mode 100644 index 000000000..d636c4f60 --- /dev/null +++ b/lib/decidim/decidim_awesome/menu.rb @@ -0,0 +1,126 @@ +# frozen_string_literal: true + +module Decidim + module DecidimAwesome + class Menu + def self.register_awesome_admin_menu! + Decidim.menu :awesome_admin_menu do |menu| + menu.add_item :editors, + I18n.t("menu.editors", scope: "decidim.decidim_awesome.admin"), + decidim_admin_decidim_awesome.config_path(:editors), + position: 1, + icon_name: "editors-text", + if: menus[:editors] + + menu.add_item :proposals, + I18n.t("menu.proposals", scope: "decidim.decidim_awesome.admin"), + decidim_admin_decidim_awesome.config_path(:proposals), + position: 2, + icon_name: "documents", + if: menus[:proposals] + + menu.add_item :surveys, + I18n.t("menu.surveys", scope: "decidim.decidim_awesome.admin"), + decidim_admin_decidim_awesome.config_path(:surveys), + position: 3, + icon_name: "surveys", + if: menus[:surveys] + + menu.add_item :styles, + I18n.t("menu.styles", scope: "decidim.decidim_awesome.admin"), + decidim_admin_decidim_awesome.config_path(:styles), + position: 4, + icon_name: "brush", + if: menus[:styles] + + menu.add_item :proposal_custom_fields, + I18n.t("menu.proposal_custom_fields", scope: "decidim.decidim_awesome.admin"), + decidim_admin_decidim_awesome.config_path(:proposal_custom_fields), + position: 5, + icon_name: "layers", + if: menus[:proposal_custom_fields] + + menu.add_item :admins, + I18n.t("menu.admins", scope: "decidim.decidim_awesome.admin"), + decidim_admin_decidim_awesome.config_path(:admins), + position: 6, + icon_name: "group-line", + if: menus[:admins] + + menu.add_item :menu_hacks, + I18n.t("menu.menu_hacks", scope: "decidim.decidim_awesome.admin"), + decidim_admin_decidim_awesome.menu_hacks_path(menus[:menu_hacks_menu] ? :menu : :home_content_block_menu), + position: 7, + icon_name: "menu-line", + if: menus[:menu_hacks], + submenu: { target_menu: :menu_hacks_submenu } + + menu.add_item :custom_redirects, + I18n.t("menu.custom_redirects", scope: "decidim.decidim_awesome.admin"), + decidim_admin_decidim_awesome.custom_redirects_path, + position: 8, + icon_name: "external-link-line", + if: menus[:custom_redirects] + + menu.add_item :livechat, + I18n.t("menu.livechat", scope: "decidim.decidim_awesome.admin"), + decidim_admin_decidim_awesome.config_path(:livechat), + position: 9, + icon_name: "chat-1-line", + if: menus[:livechat] + + menu.add_item :checks, + I18n.t("menu.checks", scope: "decidim.decidim_awesome.admin"), + decidim_admin_decidim_awesome.checks_path, + position: 10, + icon_name: "pulse" + end + end + + def self.register_menu_hacks_submenu! + Decidim.menu :menu_hacks_submenu do |menu| + menu.add_item :main_menu, + I18n.t("menu.title", scope: "decidim.decidim_awesome.admin.menu_hacks.index"), + decidim_admin_decidim_awesome.menu_hacks_path(:menu), + position: 7.1, + if: menus[:menu_hacks_menu] + + menu.add_item :content_block_main_menu, + I18n.t("home_content_block_menu.title", scope: "decidim.decidim_awesome.admin.menu_hacks.index"), + decidim_admin_decidim_awesome.menu_hacks_path(:home_content_block_menu), + position: 7.2, + if: menus[:menu_hacks_home_content_block_menu] + end + end + + def self.menus + @menus ||= { + editors: config_enabled?([:allow_images_in_editors, :allow_videos_in_editors]), + proposals: config_enabled?( + [ + :allow_images_in_proposals, + :validate_title_min_length, :validate_title_max_caps_percent, + :validate_title_max_marks_together, :validate_title_start_with_caps, + :validate_body_min_length, :validate_body_max_caps_percent, + :validate_body_max_marks_together, :validate_body_start_with_caps + ] + ), + surveys: config_enabled?(:auto_save_forms), + styles: config_enabled?(:scoped_styles), + proposal_custom_fields: config_enabled?(:proposal_custom_fields), + admins: config_enabled?(:scoped_admins), + menu_hacks: config_enabled?([:menu, :home_content_block_menu]), + menu_hacks_menu: config_enabled?(:menu), + menu_hacks_home_content_block_menu: config_enabled?(:home_content_block_menu), + custom_redirects: config_enabled?(:custom_redirects), + livechat: config_enabled?([:intergram_for_admins, :intergram_for_public]) + } + end + + # ensure boolean value + def self.config_enabled?(var) + DecidimAwesome.enabled?(var) + end + end + end +end diff --git a/lib/decidim/decidim_awesome/test/initializer.rb b/lib/decidim/decidim_awesome/test/initializer.rb index af2920883..f3d2543c6 100644 --- a/lib/decidim/decidim_awesome/test/initializer.rb +++ b/lib/decidim/decidim_awesome/test/initializer.rb @@ -13,6 +13,7 @@ :intergram_for_public, :scoped_styles, :proposal_custom_fields, + :proposal_private_custom_fields, :menu, :scoped_admins, :custom_redirects, @@ -25,7 +26,9 @@ :validate_body_max_marks_together, :validate_body_start_with_caps, :weighted_proposal_voting, - :additional_proposal_scopes + :additional_proposal_sortings, + :allow_limiting_amendments, + :proposal_private_custom_fields ].each do |conf| config.send("#{conf}=", :disabled) end diff --git a/lib/decidim/decidim_awesome/test/shared_examples/box_label_editor.rb b/lib/decidim/decidim_awesome/test/shared_examples/box_label_editor_examples.rb similarity index 80% rename from lib/decidim/decidim_awesome/test/shared_examples/box_label_editor.rb rename to lib/decidim/decidim_awesome/test/shared_examples/box_label_editor_examples.rb index 582222f20..969745930 100644 --- a/lib/decidim/decidim_awesome/test/shared_examples/box_label_editor.rb +++ b/lib/decidim/decidim_awesome/test/shared_examples/box_label_editor_examples.rb @@ -5,19 +5,19 @@ it "updates the label when no changes" do link = find("[data-key=#{key}] a.awesome-auto-edit", match: :first) - expect(page).not_to have_css("input.awesome-auto-edit") + expect(page).not_to have_field(class: "awesome-auto-edit") link.click - expect(page).to have_css("input.awesome-auto-edit") + expect(page).to have_field(class: "awesome-auto-edit") find("body").click - expect(page).not_to have_css("input.awesome-auto-edit") + expect(page).not_to have_field(class: "awesome-auto-edit") link.click input = find("[data-key=#{key}] input.awesome-auto-edit") input.fill_in with: "A new làbel\n" sleep 1 - expect(page).not_to have_css("input.awesome-auto-edit") + expect(page).not_to have_field(class: "awesome-auto-edit") expect(page).to have_css("span.awesome-auto-edit[data-key=a_new_label]") - find("*[type=submit]").click + click_link_or_button "Update configuration" case test_case when :css expect(page).to have_content("body {background: red;}") @@ -48,19 +48,19 @@ end link = find("[data-key=#{key}] a.awesome-auto-edit", match: :first) - expect(page).not_to have_css("input.awesome-auto-edit") + expect(page).not_to have_field(class: "awesome-auto-edit") link.click - expect(page).to have_css("input.awesome-auto-edit") + expect(page).to have_field(class: "awesome-auto-edit") find("body").click - expect(page).not_to have_css("input.awesome-auto-edit") + expect(page).not_to have_field(class: "awesome-auto-edit") link.click input = find("[data-key=#{key}] input.awesome-auto-edit") input.fill_in with: "A new làbel\n" sleep 1 - expect(page).not_to have_css("input.awesome-auto-edit") + expect(page).not_to have_field(class: "awesome-auto-edit") expect(page).to have_css("span.awesome-auto-edit[data-key=a_new_label]") - find("*[type=submit]").click + click_link_or_button "Update configuration" case test_case when :css expect(page).to have_admin_callout("updated successfully") @@ -78,34 +78,34 @@ it "updates the label with post changes" do link = find("[data-key=#{key}] a.awesome-auto-edit", match: :first) - expect(page).not_to have_css("input.awesome-auto-edit") + expect(page).not_to have_field(class: "awesome-auto-edit") link.click - expect(page).to have_css("input.awesome-auto-edit") + expect(page).to have_field(class: "awesome-auto-edit") find("body").click - expect(page).not_to have_css("input.awesome-auto-edit") + expect(page).not_to have_field(class: "awesome-auto-edit") link.click input = find("[data-key=#{key}] input.awesome-auto-edit") input.fill_in with: "A new làbel\n" sleep 1 - expect(page).not_to have_css("input.awesome-auto-edit") + expect(page).not_to have_field(class: "awesome-auto-edit") expect(page).to have_css("span.awesome-auto-edit[data-key=a_new_label]") case test_case when :css sleep 1 page.execute_script('document.querySelector("[data-key=a_new_label] .CodeMirror").CodeMirror.setValue("body {background: lilac;}");') - find("*[type=submit]").click + click_link_or_button "Update configuration" expect(page).to have_admin_callout("updated successfully") expect(page).to have_content("body {background: lilac;}") when :fields expect(page).to have_content("Full Name") sleep 2 page.execute_script("$('.proposal_custom_fields_container[data-key=a_new_label] .proposal_custom_fields_editor')[0].FormBuilder.actions.setData(#{data})") - find("*[type=submit]").click + click_link_or_button "Update configuration" expect(page).to have_content("Short Name") when :admins page.execute_script("$('.multiusers-select:first').append(new Option('#{user.name}', #{user.id}, true, true)).trigger('change');") - find("*[type=submit]").click + click_link_or_button "Update configuration" expect(page).to have_content(user.name.to_s) expect(page).to have_content(user2.name.to_s) expect(page).to have_content(user3.name.to_s) diff --git a/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb b/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb index 65f6afc07..527463f2e 100644 --- a/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +++ b/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb @@ -4,7 +4,7 @@ it "has DecidimAwesome object" do expect(page.body).to have_content("window.DecidimAwesome") expect(page.body).to have_content("window.DecidimAwesome.version") - expect(page.body).to have_content("window.DecidimAwesome.editor_uploader_path") + expect(page.body).to have_content("window.DecidimAwesome.editorUploaderPath") expect(page.body).to have_content("window.DecidimAwesome.texts") end end @@ -12,7 +12,7 @@ shared_examples "has menu link" do |item| let(:prefix) { "config/" } it "shows the feature link" do - within ".secondary-nav" do + within ".sidebar-menu" do expect(page).to have_link(href: "/admin/decidim_awesome/#{prefix}#{item}") end end @@ -21,13 +21,14 @@ shared_examples "do not have menu link" do |item| let(:prefix) { "config/" } it "do not show the feature link" do - within ".secondary-nav" do + within ".sidebar-menu" do expect(page).not_to have_link(href: "/admin/decidim_awesome/#{prefix}#{item}") end end end -shared_examples "forbids disabled feature" do +shared_examples "forbids disabled feature without redirect" do + render_views let(:feature) { :menu } let(:features) { [feature] } before do @@ -36,7 +37,24 @@ end end - it "redirects with error" do + it "fails with error" do + action + + expect(response.body).to eq("no permissions for #{feature}") + end +end + +shared_examples "forbids disabled feature with redirect" do + render_views + let(:feature) { :menu } + let(:features) { [feature] } + before do + features.each do |feat| + allow(Decidim::DecidimAwesome.config).to receive(feat).and_return(:disabled) + end + end + + it "fails with error" do action expect(flash[:alert]).not_to be_empty diff --git a/lib/decidim/decidim_awesome/test/shared_examples/custom_fields_examples.rb b/lib/decidim/decidim_awesome/test/shared_examples/custom_fields_examples.rb new file mode 100644 index 000000000..9edcd25f2 --- /dev/null +++ b/lib/decidim/decidim_awesome/test/shared_examples/custom_fields_examples.rb @@ -0,0 +1,155 @@ +# frozen_string_literal: true + +shared_examples "creates a new box" do |name| + it "saves the content" do + click_on "Add a new \"#{name}\" box" + + expect(page).to have_admin_callout("created successfully") + + sleep 2 + page.execute_script("document.querySelector('.proposal_custom_fields_editor').FormBuilder.actions.setData(#{data})") + + click_on "Update configuration" + + sleep 2 + expect(page).to have_admin_callout("updated successfully") + expect(page).to have_content("Full Name") + expect(page).to have_content("Occupation") + expect(page).to have_content("Street Sweeper") + expect(page).to have_content("Short Bio") + end +end + +shared_examples "updates a box" do + it "updates the content" do + sleep 2 + expect(page).to have_content("Full Name") + expect(page).to have_content("Occupation") + expect(page).to have_content("Street Sweeper") + expect(page).not_to have_content("Short Bio") + + page.execute_script("$('.proposal_custom_fields_container[data-key=\"foo\"] .proposal_custom_fields_editor')[0].FormBuilder.actions.setData(#{data})") + click_on "Update configuration" + + sleep 2 + expect(page).to have_admin_callout("updated successfully") + expect(page).to have_content("Full Name") + expect(page).not_to have_content("Occupation") + expect(page).not_to have_content("Street Sweeper") + expect(page).to have_content("Short Bio") + end +end + +shared_examples "removes a box" do |name| + let(:custom_fields) do + { + "foo" => "[#{data1}]", + "bar" => "[#{data2}]" + } + end + + it "updates the content" do + sleep 2 + expect(page).to have_content("Full Name") + expect(page).to have_content("Occupation") + expect(page).to have_content("Street Sweeper") + expect(page).not_to have_content("Short Bio") + + within ".proposal_custom_fields_container[data-key=\"foo\"]" do + accept_confirm { click_on "Remove this \"#{name}\" box" } + end + + sleep 2 + expect(page).to have_admin_callout("removed successfully") + expect(page).not_to have_content("Full Name") + expect(page).to have_content("Occupation") + expect(page).to have_content("Street Sweeper") + expect(page).not_to have_content("Short Bio") + + expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization:, var: "#{var_name}_foo")).not_to be_present + expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization:, var: "#{var_name}_bar")).to be_present + end +end + +shared_examples "adds a constraint" do + let(:custom_fields) do + { + "foo" => "[#{data1}]", + "bar" => "[#{data2}]" + } + end + + it "adds a new config helper var" do + within ".proposal_custom_fields_container[data-key=\"foo\"]" do + click_on "Add case" + end + + select "Processes", from: "constraint_participatory_space_manifest" + within "#new-modal-#{var_name}_foo" do + click_on "Save" + end + + sleep 2 + + within ".proposal_custom_fields_container[data-key=\"foo\"] .constraints-editor" do + expect(page).to have_content("Processes") + end + + expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization:, var: "#{var_name}_bar")).to be_present + expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization:, var: "#{var_name}_bar").constraints.first.settings).to eq(constraint.settings) + end +end + +shared_examples "removes a constraint" do + let(:custom_fields) do + { + "foo" => "[#{data1}]", + "bar" => "[#{data2}]" + } + end + + it "removes the helper config var" do + within ".proposal_custom_fields_container[data-key=\"bar\"] .constraints-editor" do + expect(page).to have_content("Processes") + expect(page).to have_content("Proposals") + end + + within ".proposal_custom_fields_container[data-key=\"bar\"] .constraints-editor" do + within first(".constraints-list li") do + click_on "Delete" + end + end + + within ".proposal_custom_fields_container[data-key=\"bar\"] .constraints-editor" do + expect(page).not_to have_content("Proposals") + end + + visit decidim_admin_decidim_awesome.config_path("#{var_name}s") + + within ".proposal_custom_fields_container[data-key=\"bar\"] .constraints-editor" do + expect(page).not_to have_content("Proposals") + end + + expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization:, var: "#{var_name}_bar")).to be_present + expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization:, var: "#{var_name}_bar").constraints.count).to eq(1) + expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization:, var: "#{var_name}_bar").constraints.first).to eq(another_constraint) + end + + context "and there is only one constraint" do + let!(:another_constraint) { nil } + + it "do not remove the helper config var" do + within ".proposal_custom_fields_container[data-key=\"bar\"] .constraints-editor" do + click_on "Delete" + end + + within ".proposal_custom_fields_container[data-key=\"bar\"] .constraints-editor" do + expect(page).to have_content("Proposals") + end + + expect(page).to have_content("Sorry, this cannot be deleted") + expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization:, var: "#{var_name}_bar").constraints.count).to eq(1) + expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization:, var: "#{var_name}_bar").constraints.first).to eq(constraint) + end + end +end diff --git a/lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb b/lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb index 69a1cf73a..35e581108 100644 --- a/lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb +++ b/lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb @@ -1,75 +1,59 @@ # frozen_string_literal: true -shared_examples "has no drag and drop" do |rte| - it "has no help text" do - expect(page).not_to have_content("Add images by dragging & dropping or pasting them.") - end - - if rte - it "has image button" do - expect(page).not_to have_xpath("//button[@class='ql-image']") - end - else - it "has no paste event" do - sleep 1 - expect(page.execute_script("return typeof $._data($('#{editor_selector}')[0], 'events').paste")).to eq("undefined") - end - - it "has no drop event" do - sleep 1 - expect(page.execute_script("return typeof $._data($('#{editor_selector}')[0], 'events').drop")).to eq("undefined") - end +shared_examples "has no image support" do + it "has no image button" do + expect(page).not_to have_xpath("//button[@class='editor-toolbar-control'][@data-editor-type='image']") end end -shared_examples "has drag and drop" do |rte| - it "has help text" do - expect(page).to have_content("Add images by dragging & dropping or pasting them.") - end - - if rte - it "has image button" do - expect(page).to have_xpath("//button[@class='ql-image']") - end - else - it "has paste event" do - sleep 1 - expect(page.execute_script("return typeof $._data($('#{editor_selector}')[0], 'events').paste")).to eq("object") - end - - it "has drop event" do - sleep 1 - expect(page.execute_script("return typeof $._data($('#{editor_selector}')[0], 'events').drop")).to eq("object") - end +shared_examples "has image support" do + it "has image button" do + expect(page).to have_xpath("//button[@class='editor-toolbar-control'][@data-editor-type='image']") end end -shared_examples "has markdown editor" do |images| - it "has CodeMirror class" do - expect(page).to have_xpath("//div[@class='CodeMirror cm-s-paper CodeMirror-wrap']") +shared_examples "has no video support" do + it "has no video button" do + expect(page).not_to have_xpath("//button[@class='editor-toolbar-control'][@data-editor-type='videoEmbed']") end +end - it "has toolbar" do - expect(page).to have_xpath("//div[@class='editor-toolbar']") - end - - if images - it "has help text" do - expect(page).to have_content("Add images by dragging & dropping or pasting them.") - end - else - it "has no help text" do - expect(page).not_to have_content("Add images by dragging & dropping or pasting them.") - end +shared_examples "has video support" do + it "has video button" do + expect(page).to have_xpath("//button[@class='editor-toolbar-control'][@data-editor-type='videoEmbed']") end end -shared_examples "has no markdown editor" do - it "has CodeMirror class" do - expect(page).not_to have_xpath("//div[@class='CodeMirror cm-s-paper CodeMirror-wrap']") +shared_examples "has no drag and drop" do + it "cannot drop a file" do + expect(page).not_to have_content("Add images by dragging & dropping or pasting them.") + find(editor_selector).drop(image) + expect(page.execute_script("return document.querySelector('#{editor_selector}').value")).not_to eq("[Uploading file...]") + sleep 1 + last_image = Decidim::DecidimAwesome::EditorImage.last + expect(last_image).to be_nil end +end - it "has toolbar" do - expect(page).not_to have_xpath("//div[@class='editor-toolbar']") +shared_examples "has drag and drop" do + it "can drop a file" do + within "form.edit_proposal" do + expect(page).to have_content("Add images by dragging & dropping or pasting them.") + fill_in :proposal_body, with: "" + end + find(editor_selector).drop(image) + expect(page.execute_script("return document.querySelector('#{editor_selector}').value")).to include("[Uploading file...]") + sleep 1 + last_image = Decidim::DecidimAwesome::EditorImage.last + expect(last_image).to be_present + content = page.execute_script("return document.querySelector('#{editor_selector}').value") + expect(content).to include(last_image.attached_uploader(:file).path) + within "form.edit_proposal" do + # ensures valid body validations + fill_in :proposal_body, with: "This is a super test with lots of downcases characters to be sure that the image name does not mess with percentage of caps.\n#{content}" + fill_in :proposal_title, with: "This is a test proposal" + click_on "Send" + end + expect(proposal.reload.body["en"]).to include(last_image.attached_uploader(:file).path) end end diff --git a/lib/decidim/decidim_awesome/test/shared_examples/scoped_admins_examples.rb b/lib/decidim/decidim_awesome/test/shared_examples/scoped_admins_examples.rb index 4fe3ae91a..11afe77d5 100644 --- a/lib/decidim/decidim_awesome/test/shared_examples/scoped_admins_examples.rb +++ b/lib/decidim/decidim_awesome/test/shared_examples/scoped_admins_examples.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true -welcome_text = "Welcome to the Admin Panel." -welcome_text = "Welcome to the Decidim Admin Panel." if legacy_version? +welcome_text = "Dashboard" shared_examples "redirects to index" do |_link| it "display index page" do @@ -34,7 +33,7 @@ it "allows module access" do visit decidim_admin_decidim_awesome.config_path(:editors) - expect(page).to have_content("Tweaks for editors") + expect(page).to have_content("Tweaks for Editor Hacks") end end @@ -88,7 +87,7 @@ it "shows participants access" do visit decidim_admin.users_path - expect(page).to have_content(legacy_version? ? "New user" : "New admin") + expect(page).to have_content("New admin") end it "shows pages access" do @@ -110,6 +109,10 @@ shared_examples "allows all admin routes" do before do visit decidim_admin.root_path + # this is a workaround to wait for the page to load + # it seems that the test might fail randomly otherwise + # underlaying issue is unknown, maybe capybara is faster clicking than ruby is at storing class variables? + sleep 0.1 end it "allows the admin root page" do @@ -117,13 +120,12 @@ end it "allows the assemblies page" do - click_link "Assemblies" - + click_link_or_button "Assemblies" expect(page).to have_content("New assembly") end it "allows the processes page" do - click_link "Processes" + click_link_or_button "Processes" expect(page).to have_content("New process") end @@ -132,6 +134,7 @@ shared_examples "allows scoped admin routes" do before do visit decidim_admin.root_path + sleep 0.1 end it "allows the admin root page" do @@ -139,14 +142,14 @@ end it "allows the assemblies page" do - click_link "Assemblies" + click_link_or_button "Assemblies" expect(page).to have_content("New assembly") end describe "forbids processes" do before do - click_link "Processes" + click_link_or_button "Processes" end it_behaves_like "redirects to index" @@ -159,16 +162,16 @@ shared_examples "has admin link" do it "has menu link" do - within ".topbar__dropmenu.topbar__user__logged" do - expect(page).to have_selector("#user-menu li", text: "Admin dashboard", visible: :hidden) + within "header" do + expect(page).to have_css("#admin-bar", text: "Admin dashboard") end end end shared_examples "has no admin link" do - it "has menu link" do - within ".topbar__dropmenu.topbar__user__logged" do - expect(page).not_to have_selector("#user-menu li", text: "Admin dashboard", visible: :hidden) + it "has no menu link" do + within "header" do + expect(page).not_to have_css("#admin-bar", text: "Admin dashboard") end end end @@ -216,7 +219,7 @@ ca: "Assamblea editada", es: "Asamblea editada" ) - find("*[type=submit]").click + click_link_or_button "Update" expect(page).to have_admin_callout("successfully") end end @@ -265,7 +268,7 @@ expect(page).to have_content("Title") expect(page).to have_content(proposal.title["en"]) - click_link "Edit proposal" + click_link_or_button "Edit proposal" expect(page).to have_content("Update proposal") fill_in_i18n( :proposal_title, @@ -274,14 +277,14 @@ ca: "Proposta editada", es: "Propuesta editada" ) - find("*[type=submit]").click + click_link_or_button "Update" expect(page).to have_admin_callout("successfully") end it "can create a proposal" do visit manage_component_path(component) - click_link "New proposal" + click_link_or_button "New proposal" expect(page).to have_content("Create proposal") fill_in_i18n( :proposal_title, @@ -297,7 +300,7 @@ ca: "Body creat", es: "Body creat" ) - find("*[type=submit]").click + click_link_or_button "Create" expect(page).to have_admin_callout("successfully") end end @@ -305,6 +308,7 @@ shared_examples "edits allowed components" do before do visit decidim_admin.root_path + sleep 0.1 end it_behaves_like "can manage component" @@ -365,8 +369,10 @@ end it "shows the list of processes" do - expect(page).to have_content("Participatory processes") - expect(page).to have_content(participatory_process.title["en"]) + within("[data-content]") do + expect(page).to have_content("Processes") + expect(page).to have_content(participatory_process.title["en"]) + end end describe "forbids editing processes" do @@ -383,8 +389,10 @@ end it "shows the list of groups" do - expect(page).to have_content("Participatory process groups") - expect(page).to have_content(process_group.title["en"]) + within("[data-content]") do + expect(page).to have_content("Process groups") + expect(page).to have_content(process_group.title["en"]) + end end end end @@ -403,7 +411,7 @@ ca: "Proces grup editat", es: "Grupo de procesos editado" ) - find("*[type=submit]").click + click_link_or_button "Update" expect(page).to have_admin_callout("successfully") end end diff --git a/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb b/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb index 0f042dbab..3f949d71f 100644 --- a/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb +++ b/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb @@ -25,31 +25,113 @@ shared_examples "activated concerns" do |enabled| it "common concerns are registered" do expect(ActionView::Base.included_modules).to include(Decidim::DecidimAwesome::AwesomeHelpers) - expect(Decidim::MenuPresenter.included_modules).to include(Decidim::DecidimAwesome::MenuPresenterOverride) - expect(Decidim::MenuItemPresenter.included_modules).to include(Decidim::DecidimAwesome::MenuItemPresenterOverride) + expect(Decidim::ViewModel.included_modules).to include(Decidim::DecidimAwesome::AwesomeHelpers) + expect(Decidim::ApplicationController.included_modules).to include(Decidim::DecidimAwesome::ContentSecurityPolicy) + expect(Decidim::Admin::ApplicationController.included_modules).to include(Decidim::DecidimAwesome::ContentSecurityPolicy) end if enabled it "concerns are registered" do expect(Decidim::User.included_modules).to include(Decidim::DecidimAwesome::UserOverride) + expect(Decidim::MenuPresenter.included_modules).to include(Decidim::DecidimAwesome::MenuPresenterOverride) + expect(Decidim::MenuItemPresenter.included_modules).to include(Decidim::DecidimAwesome::MenuItemPresenterOverride) expect(Decidim::ErrorsController.included_modules).to include(Decidim::DecidimAwesome::NotFoundRedirect) expect(Decidim::Proposals::ApplicationHelper.included_modules).to include(Decidim::DecidimAwesome::Proposals::ApplicationHelperOverride) expect(Decidim::Proposals::ProposalWizardCreateStepForm.included_modules).to include(Decidim::DecidimAwesome::Proposals::ProposalWizardCreateStepFormOverride) + expect(Decidim::Proposals::ProposalWizardCreateStepForm.included_modules).to include(Decidim::DecidimAwesome::Proposals::ProposalFormOverride) + expect(Decidim::Proposals::Admin::ProposalForm.included_modules).to include(Decidim::DecidimAwesome::Proposals::ProposalFormOverride) expect(Decidim::AmendmentsHelper.included_modules).to include(Decidim::DecidimAwesome::AmendmentsHelperOverride) expect(EtiquetteValidator.included_modules).to include(Decidim::DecidimAwesome::EtiquetteValidatorOverride) + expect(Decidim::Proposals::ProposalVote.included_modules).to include(Decidim::DecidimAwesome::HasVoteWeight) + expect(Decidim::Proposals::ProposalType.included_modules).to include(Decidim::DecidimAwesome::AddProposalTypeVoteWeights) + expect(Decidim::Proposals::ProposalType.included_modules).to include(Decidim::DecidimAwesome::AddProposalTypeCustomFields) + expect(Decidim::Proposals::ProposalLCell.included_modules).to include(Decidim::DecidimAwesome::ProposalLCellOverride) + expect(Decidim::Proposals::Proposal.included_modules).to include(Decidim::DecidimAwesome::HasProposalExtraFields) + expect(Decidim::Proposals::CollaborativeDraft.included_modules).to include(Decidim::DecidimAwesome::HasProposalExtraFields) + expect(Decidim::ContentBlocks::GlobalMenuCell.included_modules).to include(Decidim::DecidimAwesome::GlobalMenuCellOverride) + expect(Decidim::BreadcrumbHelper.included_modules).to include(Decidim::DecidimAwesome::BreadcrumbHelperOverride) + expect(Decidim::BreadcrumbRootMenuItemPresenter.included_modules).to include(Decidim::DecidimAwesome::BreadcrumbRootMenuItemPresenterOverride) + expect(Decidim::Proposals::ProposalSerializer.included_modules).to include(Decidim::DecidimAwesome::Proposals::ProposalSerializerOverride) + expect(Decidim::Proposals::ProposalVotesController.included_modules).to include(Decidim::DecidimAwesome::Proposals::ProposalVotesControllerOverride) + expect(Decidim::AmendmentsController.included_modules).to include(Decidim::DecidimAwesome::LimitPendingAmendments) + expect(Decidim::Proposals::ProposalsController.included_modules).to include(Decidim::DecidimAwesome::Proposals::OrderableOverride) end + else it "concerns are not registered" do expect(Decidim::User.included_modules).not_to include(Decidim::DecidimAwesome::UserOverride) + expect(Decidim::MenuPresenter.included_modules).not_to include(Decidim::DecidimAwesome::MenuPresenterOverride) + expect(Decidim::MenuItemPresenter.included_modules).not_to include(Decidim::DecidimAwesome::MenuItemPresenterOverride) expect(Decidim::ErrorsController.included_modules).not_to include(Decidim::DecidimAwesome::NotFoundRedirect) expect(Decidim::Proposals::ApplicationHelper.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ApplicationHelperOverride) expect(Decidim::Proposals::ProposalWizardCreateStepForm.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ProposalWizardCreateStepFormOverride) + expect(Decidim::Proposals::ProposalWizardCreateStepForm.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ProposalFormOverride) + expect(Decidim::Proposals::Admin::ProposalForm.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ProposalFormOverride) expect(Decidim::AmendmentsHelper.included_modules).not_to include(Decidim::DecidimAwesome::AmendmentsHelperOverride) expect(EtiquetteValidator.included_modules).not_to include(Decidim::DecidimAwesome::EtiquetteValidatorOverride) + expect(Decidim::Proposals::ProposalVote.included_modules).not_to include(Decidim::DecidimAwesome::HasVoteWeight) + expect(Decidim::Proposals::ProposalType.included_modules).not_to include(Decidim::DecidimAwesome::AddProposalTypeVoteWeights) + expect(Decidim::Proposals::ProposalType.included_modules).not_to include(Decidim::DecidimAwesome::AddProposalTypeCustomFields) + expect(Decidim::Proposals::ProposalLCell.included_modules).not_to include(Decidim::DecidimAwesome::ProposalLCellOverride) + expect(Decidim::Proposals::Proposal.included_modules).not_to include(Decidim::DecidimAwesome::HasProposalExtraFields) + expect(Decidim::Proposals::CollaborativeDraft.included_modules).not_to include(Decidim::DecidimAwesome::HasProposalExtraFields) + expect(Decidim::ContentBlocks::GlobalMenuCell.included_modules).not_to include(Decidim::DecidimAwesome::GlobalMenuCellOverride) + expect(Decidim::BreadcrumbHelper.included_modules).not_to include(Decidim::DecidimAwesome::BreadcrumbHelperOverride) + expect(Decidim::BreadcrumbRootMenuItemPresenter.included_modules).not_to include(Decidim::DecidimAwesome::BreadcrumbRootMenuItemPresenterOverride) + expect(Decidim::Proposals::ProposalSerializer.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ProposalSerializerOverride) + expect(Decidim::Proposals::ProposalVotesController.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ProposalVotesControllerOverride) + expect(Decidim::AmendmentsController.included_modules).not_to include(Decidim::DecidimAwesome::LimitPendingAmendments) + expect(Decidim::Proposals::ProposalsController.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::OrderableOverride) end end end +shared_examples "csp directives" do |enabled| + let(:organization) { create(:organization) } + let(:fonts) { controller.content_security_policy.send(:policy)["font-src"] } + let(:scripts) { controller.content_security_policy.send(:policy)["script-src"] } + let(:frames) { controller.content_security_policy.send(:policy)["frame-src"] } + + shared_examples "controller directives" do + if enabled + it "has CSP directives" do + get :show do + expect(fonts).to eq(["'self'", "data:"]) + expect(scripts).to eq(["'self'", "'unsafe-inline'", "'unsafe-eval'", "https://www.intergram.xyz"]) + expect(frames).to eq(["'self'", "www.youtube-nocookie.com", "player.vimeo.com", "https://www.intergram.xyz"]) + end + end + else + it "has no CSP directives" do + get :show do + expect(fonts).to eq(["'self'"]) + expect(scripts).to eq(["'self'", "'unsafe-inline'", "'unsafe-eval'"]) + expect(frames).to eq(["'self'", "www.youtube-nocookie.com", "player.vimeo.com"]) + end + end + end + end + + describe Decidim::HomepageController, type: :controller do + routes { Decidim::Core::Engine.routes } + before do + request.env["decidim.current_organization"] = user.organization + end + + it_behaves_like "controller directives" + end + + describe Decidim::Admin::DashboardController, type: :controller do + routes { Decidim::Admin::Engine.routes } + + before do + request.env["decidim.current_organization"] = user.organization + end + + it_behaves_like "controller directives" + end +end + shared_examples "custom menus" do |enabled| describe Decidim::MenuPresenter, type: :helper do before do @@ -74,11 +156,9 @@ let(:image_vars) do [ :allow_images_in_proposals, - :allow_images_in_small_editor, - :allow_images_in_full_editor, + :allow_videos_in_editors, + :allow_images_in_editors, :allow_images_in_proposals, - :use_markdown_editor, - :allow_images_in_markdown_editor, :auto_save_forms, :intergram_for_admins, :intergram_for_public @@ -91,7 +171,7 @@ end it "renders the home page" do - expect(page).to have_content("Home") + expect(page).to have_css(".home") end it "has DecidimAwesome object" do @@ -111,7 +191,7 @@ end it "has custom fields javascript" do - expect(page).to have_xpath("//script[contains(@src,'decidim_decidim_awesome_proposals_custom_fields')]", visible: :all) + expect(page).to have_xpath("//script[contains(@src,'decidim_decidim_awesome_custom_fields')]", visible: :all) end it "has custom styles CSS" do @@ -125,7 +205,7 @@ end it "do not have custom fields javascript" do - expect(page).not_to have_xpath("//script[contains(@src,'decidim_decidim_awesome_proposals_custom_fields')]", visible: :all) + expect(page).not_to have_xpath("//script[contains(@src,'decidim_decidim_awesome_custom_fields')]", visible: :all) end it "do not have custom styles CSS" do @@ -143,7 +223,8 @@ "config/styles", "config/proposal_custom_fields", "config/admins", - "menu_hacks", + "menus/menu/hacks", + "menus/home_content_block_menu/hacks", "custom_redirects", "config/livechat" ] @@ -167,32 +248,24 @@ if enabled it "renders the editors page" do - expect(page).to have_content("Tweaks for editors") - end - - it "has custom fields javascript" do - expect(page).to have_xpath("//script[contains(@src,'decidim_admin_decidim_awesome_custom_fields')]", visible: :all) + expect(page).to have_content("Tweaks for Editor Hacks") end it "has all admin menus" do menus.each do |menu| - within ".secondary-nav" do + within ".sidebar-menu" do expect(page).to have_link(href: "/admin/decidim_awesome/#{menu}") end end end else it "renders the compatibility checks page" do - expect(page).to have_content("System compatibility checks") - end - - it "do not have custom fields javascript" do - expect(page).not_to have_xpath("//script[contains(@src,'decidim_admin_decidim_awesome_custom_fields')]", visible: :all) + expect(page).to have_content("System compatibility") end it "has no admin menus" do menus.each do |menu| - within ".secondary-nav" do + within ".sidebar-menu" do expect(page).not_to have_link(href: "/admin/decidim_awesome/#{menu}") end end diff --git a/lib/decidim/decidim_awesome/version.rb b/lib/decidim/decidim_awesome/version.rb index 6c8a6d695..4b2845cfe 100644 --- a/lib/decidim/decidim_awesome/version.rb +++ b/lib/decidim/decidim_awesome/version.rb @@ -3,7 +3,7 @@ module Decidim # This holds the decidim-decidim_awesome version. module DecidimAwesome - VERSION = "0.10.2" + VERSION = "0.10.3" COMPAT_DECIDIM_VERSION = [">= 0.26.0", "< 0.28"].freeze end end diff --git a/package-lock.json b/package-lock.json index 43151745e..c8c9aa0a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "codemirror": "^5.65.0", "europa": "^4.0.0", "form-storage": "^1.3.5", - "formBuilder": "^3.6.1", + "formBuilder": "^3.19.12", "highlight.js": "^11.4.0", "inline-attachment": "^2.0.3", "inscrybmde": "^1.11.6", @@ -44,55 +44,63 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.1.1", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.12.11", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.20.14", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.17.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@ampproject/remapping": "^2.0.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.2", - "@babel/parser": "^7.17.0", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -102,61 +110,33 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/eslint-parser": { - "version": "7.19.1", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz", + "integrity": "sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==", "dev": true, - "license": "MIT", "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || >=14.0.0" }, "peerDependencies": { - "@babel/core": ">=7.11.0", - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/@babel/eslint-parser/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", "dev": true, "dependencies": { - "@babel/types": "^7.23.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -164,82 +144,58 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.7", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", + "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", "dev": true, - "license": "ISC", "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.0", "semver": "^6.3.1" }, "engines": { @@ -249,22 +205,15 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.20.5", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.2.1" + "@babel/helper-annotate-as-pure": "^7.24.7", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -274,144 +223,95 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "resolve": "^1.14.2" }, "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", "dev": true, "dependencies": { - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.11", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -421,14 +321,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -438,190 +338,154 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.20.2" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.20.5", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.17.2", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", + "node_modules/@babel/parser": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "@babel/types": "^7.25.2" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">=4" + "node": ">=6.0.0" } }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", + "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" + "node": ">=6.9.0" }, - "engines": { - "node": ">=6.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -631,13 +495,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -646,27 +511,28 @@ "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -678,29 +544,34 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.20.7", + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.12.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -709,43 +580,37 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -754,46 +619,37 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -802,13 +658,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -817,48 +673,37 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.20.7", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", - "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -867,25 +712,23 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -893,35 +736,35 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { + "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -929,23 +772,25 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { + "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -954,117 +799,162 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-jsx": { + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, - "license": "MIT", "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", + "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.12.0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", + "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.0", + "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" @@ -1073,12 +963,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1087,14 +979,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1103,12 +994,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1117,12 +1010,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.20.15", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1131,43 +1025,30 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.20.7", + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", + "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" + "@babel/helper-create-regexp-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.20.7", + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1176,12 +1057,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.20.7", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1190,13 +1073,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1205,12 +1089,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1219,13 +1105,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" }, "engines": { "node": ">=6.9.0" @@ -1234,12 +1122,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1248,14 +1138,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1264,12 +1153,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -1279,11 +1170,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1293,12 +1185,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.20.11", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1308,13 +1201,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.20.11", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1324,14 +1218,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -1341,12 +1236,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1356,12 +1252,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1371,11 +1268,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1384,13 +1282,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1399,12 +1298,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.20.7", + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -1413,12 +1314,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1427,12 +1332,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1441,16 +1348,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.20.13", + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.20.7" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1459,12 +1364,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1473,13 +1381,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1488,13 +1396,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.20.5", + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1503,12 +1412,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -1517,17 +1430,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.19.6", + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1536,20 +1445,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", + "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1558,13 +1460,17 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.20.7", + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz", + "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/types": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -1573,12 +1479,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", + "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/plugin-transform-react-jsx": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1587,12 +1494,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", + "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1601,12 +1510,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.7", + "regenerator-transform": "^0.15.2" }, "engines": { "node": ">=6.9.0" @@ -1615,12 +1526,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1629,13 +1541,18 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1644,86 +1561,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env": { - "version": "7.20.2", + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1732,40 +1576,29 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", + "node_modules/@babel/plugin-transform-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", "dev": true, - "license": "MIT", "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/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-react": { - "version": "7.18.6", + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1774,241 +1607,300 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/runtime": { - "version": "7.20.13", + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", "dev": true, - "license": "MIT", "dependencies": { - "regenerator-runtime": "^0.13.11" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/template/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/template/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/template/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", "dev": true, "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/template/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/template/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/template/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/template/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/traverse": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", - "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.3", - "@babel/types": "^7.23.3", - "debug": "^4.1.0", - "globals": "^11.1.0" + "node_modules/@babel/preset-env": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", + "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.37.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "node_modules/@babel/preset-env/node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/traverse/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/traverse/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@babel/preset-react": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", + "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-transform-react-display-name": "^7.24.7", + "@babel/plugin-transform-react-jsx": "^7.24.7", + "@babel/plugin-transform-react-jsx-development": "^7.24.7", + "@babel/plugin-transform-react-pure-annotations": "^7.24.7" }, "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/traverse/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/traverse/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", "dev": true }, - "node_modules/@babel/traverse/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", + "node_modules/@babel/runtime": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", "dev": true, - "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/traverse": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", - "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2052,8 +1944,9 @@ }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ajv": "^6.12.4", @@ -2070,10 +1963,41 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "deprecated": "Use @eslint/config-array instead", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.0", @@ -2086,65 +2010,74 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true, - "license": "BSD-3-Clause", "peer": true }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, - "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true, - "license": "MIT" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, - "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", "dev": true, - "license": "MIT", "dependencies": { "eslint-scope": "5.1.1" } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -2156,8 +2089,9 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 8" @@ -2165,8 +2099,9 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -2182,12 +2117,14 @@ "integrity": "sha512-F6S74NGpxhbbDRFsQFGYqefRfZPgYvePNtz9hHKYOqLturrsqrDoG+UcrxEGHsvqDUorMYfx4Wl3K8smmk/u2g==" }, "node_modules/@stylelint/postcss-css-in-js": { - "version": "0.37.2", + "version": "0.37.3", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.3.tgz", + "integrity": "sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@babel/core": ">=7.9.0" + "@babel/core": "^7.17.9" }, "peerDependencies": { "postcss": ">=7.0.0", @@ -2196,8 +2133,10 @@ }, "node_modules/@stylelint/postcss-markdown": { "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", + "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", + "deprecated": "Use the original unforked package instead: postcss-markdown", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "remark": "^13.0.0", @@ -2210,46 +2149,53 @@ }, "node_modules/@types/json5": { "version": "0.0.29", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true }, "node_modules/@types/mdast": { - "version": "3.0.10", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@types/unist": "*" + "@types/unist": "^2" } }, "node_modules/@types/minimist": { - "version": "1.2.2", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@types/normalize-package-data": { - "version": "2.4.1", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@types/parse-json": { - "version": "4.0.0", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@types/unist": { - "version": "2.0.6", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/acorn": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, - "license": "MIT", "peer": true, "bin": { "acorn": "bin/acorn" @@ -2260,8 +2206,9 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peer": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -2269,8 +2216,9 @@ }, "node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -2284,9 +2232,10 @@ } }, "node_modules/ansi-colors": { - "version": "4.1.1", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6" @@ -2294,32 +2243,31 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "4.3.0", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, "node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "sprintf-js": "~1.0.2" @@ -2327,22 +2275,41 @@ }, "node_modules/aria-query": { "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "deep-equal": "^2.0.5" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-includes": { - "version": "3.1.6", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -2354,21 +2321,27 @@ }, "node_modules/array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" } }, - "node_modules/array.prototype.flat": { + "node_modules/array.prototype.findlast": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -2377,16 +2350,18 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -2395,38 +2370,103 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arrify": { - "version": "1.0.1", + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, - "license": "MIT", - "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/ast-types-flow": { - "version": "0.0.7", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/astral-regex": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -2434,8 +2474,9 @@ }, "node_modules/autoprefixer": { "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "browserslist": "^4.12.0", @@ -2454,10 +2495,21 @@ "url": "https://tidelift.com/funding/github/npm/autoprefixer" } }, + "node_modules/autoprefixer/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true, + "peer": true + }, "node_modules/available-typed-arrays": { - "version": "1.0.5", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, - "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -2466,70 +2518,68 @@ } }, "node_modules/axe-core": { - "version": "4.6.3", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz", + "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==", "dev": true, - "license": "MPL-2.0", "engines": { "node": ">=4" } }, "node_modules/axobject-query": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "deep-equal": "^2.0.5" } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" + "@babel/helper-define-polyfill-provider": "^0.6.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/bail": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", "dev": true, - "license": "MIT", "peer": true, "funding": { "type": "github", @@ -2538,32 +2588,37 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.21.5", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "dev": true, "funding": [ { @@ -2573,14 +2628,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -2591,16 +2649,24 @@ }, "node_modules/buffer-builder": { "version": "0.2.0", - "dev": true, - "license": "MIT/X11" + "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", + "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", + "dev": true }, "node_modules/call-bind": { - "version": "1.0.2", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, - "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2608,8 +2674,9 @@ }, "node_modules/callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6" @@ -2617,8 +2684,9 @@ }, "node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6" @@ -2626,8 +2694,9 @@ }, "node_modules/camelcase-keys": { "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "camelcase": "^5.3.1", @@ -2642,7 +2711,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001456", + "version": "1.0.30001651", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", + "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", "dev": true, "funding": [ { @@ -2652,30 +2723,32 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/chalk": { - "version": "4.1.2", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" } }, "node_modules/character-entities": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true, - "license": "MIT", "peer": true, "funding": { "type": "github", @@ -2684,8 +2757,9 @@ }, "node_modules/character-entities-legacy": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "dev": true, - "license": "MIT", "peer": true, "funding": { "type": "github", @@ -2694,8 +2768,9 @@ }, "node_modules/character-reference-invalid": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "dev": true, - "license": "MIT", "peer": true, "funding": { "type": "github", @@ -2704,8 +2779,9 @@ }, "node_modules/clone-regexp": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "is-regexp": "^2.0.0" @@ -2715,60 +2791,53 @@ } }, "node_modules/codemirror": { - "version": "5.65.0", - "license": "MIT" + "version": "5.65.17", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.17.tgz", + "integrity": "sha512-1zOsUx3lzAOu/gnMAZkQ9kpIHcPYOc9y1Fbm2UVk5UBPkdq380nhkelG0qUwm1f7wPvTbndu9ZYlug35EwAZRQ==" }, "node_modules/codemirror-spell-checker": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/codemirror-spell-checker/-/codemirror-spell-checker-1.1.2.tgz", + "integrity": "sha512-2Tl6n0v+GJRsC9K3MLCdLaMOmvWL0uukajNJseorZJsslaxZyZMgENocPU8R0DyoTAiKsyqiemSOZo7kjGV0LQ==", "dependencies": { "typo-js": "*" } }, "node_modules/color-convert": { - "version": "2.0.1", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "peer": true + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/convert-source-map": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/core-js-compat": { - "version": "3.28.0", + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz", + "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==", "dev": true, - "license": "MIT", "dependencies": { - "browserslist": "^4.21.5" + "browserslist": "^4.23.3" }, "funding": { "type": "opencollective", @@ -2776,9 +2845,10 @@ } }, "node_modules/cosmiconfig": { - "version": "7.0.1", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/parse-json": "^4.0.0", @@ -2793,8 +2863,9 @@ }, "node_modules/cross-spawn": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "path-key": "^3.1.0", @@ -2807,8 +2878,9 @@ }, "node_modules/cssesc": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, - "license": "MIT", "peer": true, "bin": { "cssesc": "bin/cssesc" @@ -2819,14 +2891,67 @@ }, "node_modules/damerau-levenshtein": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true, - "license": "BSD-2-Clause", "peer": true }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { - "version": "4.3.3", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -2841,17 +2966,19 @@ }, "node_modules/decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/decamelize-keys": { - "version": "1.1.0", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "decamelize": "^1.1.0", @@ -2859,35 +2986,42 @@ }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/decode-uri-component": { - "version": "0.2.0", - "license": "MIT", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "engines": { "node": ">=0.10" } }, "node_modules/deep-equal": { - "version": "2.2.0", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", + "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", @@ -2895,11 +3029,14 @@ "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.1", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2907,15 +3044,35 @@ }, "node_modules/deep-is": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, - "license": "MIT", "peer": true }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-properties": { - "version": "1.2.0", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "license": "MIT", "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -2928,8 +3085,9 @@ }, "node_modules/dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "path-type": "^4.0.0" @@ -2940,8 +3098,9 @@ }, "node_modules/doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "esutils": "^2.0.2" @@ -2952,8 +3111,9 @@ }, "node_modules/dom-serializer": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "domelementtype": "^2.0.1", @@ -2961,7 +3121,9 @@ } }, "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.2.0", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { @@ -2969,13 +3131,13 @@ "url": "https://github.com/sponsors/fb55" } ], - "license": "BSD-2-Clause", "peer": true }, "node_modules/dom-serializer/node_modules/entities": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" @@ -2983,14 +3145,16 @@ }, "node_modules/domelementtype": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true, - "license": "BSD-2-Clause", "peer": true }, "node_modules/domhandler": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { "domelementtype": "1" @@ -2998,8 +3162,9 @@ }, "node_modules/domutils": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { "dom-serializer": "0", @@ -3007,27 +3172,32 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.301", - "dev": true, - "license": "ISC" + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.5.tgz", + "integrity": "sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA==", + "dev": true }, "node_modules/element-matches-polyfill": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/element-matches-polyfill/-/element-matches-polyfill-1.0.0.tgz", + "integrity": "sha512-6xnaB9NpWYmSgWP1/njuCanX1nopjVZRvSivd9cX7cfURGdldeT46g+3ph1pfNNiiPvHLjfhUk/8HXQkbcu7ng==" }, "node_modules/emoji-regex": { - "version": "8.0.0", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/enquirer": { - "version": "2.3.6", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "ansi-colors": "^4.1.1" + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8.6" @@ -3035,57 +3205,73 @@ }, "node_modules/entities": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true, - "license": "BSD-2-Clause", "peer": true }, "node_modules/error-ex": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { - "version": "1.21.1", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "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", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.13.1", "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.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -3094,10 +3280,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-get-iterator": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.2", @@ -3114,32 +3322,72 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -3153,29 +3401,28 @@ } }, "node_modules/escalade": { - "version": "3.1.1", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { - "version": "4.0.0", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", - "peer": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, "node_modules/eslint": { "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@babel/code-frame": "7.12.11", @@ -3230,9 +3477,10 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.3.0", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, - "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -3242,8 +3490,9 @@ }, "node_modules/eslint-config-standard": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-11.0.0.tgz", + "integrity": "sha512-oDdENzpViEe5fwuRCWla7AXQd++/oyIp8zP+iP9jiUPG6NBj3SHgdgtl/kTn00AjeN+1HNvavTKmYbMo+xMOlw==", "dev": true, - "license": "MIT", "peerDependencies": { "eslint": ">=4.18.0", "eslint-plugin-import": ">=2.8.0", @@ -3253,46 +3502,56 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { - "version": "2.7.3", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, - "license": "MIT", "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" + "debug": "^3.2.7" }, "engines": { "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-es": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "eslint-utils": "^2.0.0", @@ -3309,23 +3568,28 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.25.4", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, - "license": "MIT", "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", - "has": "^1.0.3", - "is-core-module": "^2.8.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" @@ -3335,17 +3599,19 @@ } }, "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -3353,33 +3619,29 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz", + "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", + "aria-query": "~5.1.3", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.9.1", + "axobject-query": "~3.1.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", + "es-iterator-helpers": "^1.0.19", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.0" }, "engines": { "node": ">=4.0" @@ -3388,25 +3650,11 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-node": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "eslint-plugin-es": "^3.0.0", @@ -3424,65 +3672,63 @@ } }, "node_modules/eslint-plugin-node/node_modules/ignore": { - "version": "5.2.0", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 4" } }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-promise": { "version": "3.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz", + "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==", "dev": true, - "license": "ISC", "peer": true, "engines": { "node": ">=4" } }, "node_modules/eslint-plugin-react": { - "version": "7.32.2", + "version": "7.35.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz", + "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "esutils": "^2.0.2" @@ -3491,22 +3737,14 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-react/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -3517,27 +3755,20 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-standard": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.1.0.tgz", + "integrity": "sha512-fVcdyuKRr0EZ4fjWl3c+gp1BANFJD1+RaWa2UPYfMZ6jCtp5RG00kSaXnK/dE5sYzt4kaWJ9qdxqUfc0d9kX0w==", "dev": true, - "license": "MIT", "peerDependencies": { "eslint": ">=3.19.0" } }, "node_modules/eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -3546,10 +3777,20 @@ "node": ">=8.0.0" } }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/eslint-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "eslint-visitor-keys": "^1.1.0" @@ -3563,8 +3804,9 @@ }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "license": "Apache-2.0", "peer": true, "engines": { "node": ">=4" @@ -3572,16 +3814,159 @@ }, "node_modules/eslint-visitor-keys": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/espree": { "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { "acorn": "^7.4.0", @@ -3594,8 +3979,9 @@ }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "license": "Apache-2.0", "peer": true, "engines": { "node": ">=4" @@ -3603,8 +3989,9 @@ }, "node_modules/esprima": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "bin": { "esparse": "bin/esparse.js", @@ -3615,9 +4002,10 @@ } }, "node_modules/esquery": { - "version": "1.4.0", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "license": "BSD-3-Clause", "peer": true, "dependencies": { "estraverse": "^5.1.0" @@ -3626,19 +4014,11 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -3646,38 +4026,34 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, "node_modules/estraverse": { - "version": "4.3.0", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/europa": { "version": "4.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/europa/-/europa-4.0.0.tgz", + "integrity": "sha512-Oy3gJqAjv7zmspU68qwjoVCJ2PmhJi1tgGtiHJt1BRK2Ve5QfRe18A8jHO5te6DZoDTcfN6gUfa2fWOyLebvgw==" }, "node_modules/execall": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "clone-regexp": "^2.1.0" @@ -3688,20 +4064,23 @@ }, "node_modules/extend": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/fast-deep-equal": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/fast-glob": { - "version": "3.2.11", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -3716,26 +4095,40 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, - "license": "MIT", "peer": true }, - "node_modules/fastest-levenshtein": { - "version": "1.0.12", + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", "dev": true, - "license": "MIT", "peer": true }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4.9.1" + } + }, "node_modules/fastq": { - "version": "1.13.0", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "reusify": "^1.0.4" @@ -3743,8 +4136,9 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "flat-cache": "^3.0.4" @@ -3754,9 +4148,10 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -3766,23 +4161,28 @@ } }, "node_modules/find-up": { - "version": "2.1.0", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "locate-path": "^2.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/flat-cache": { - "version": "3.0.4", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { @@ -3790,26 +4190,30 @@ } }, "node_modules/flatted": { - "version": "3.2.5", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/for-each": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/form-serialize": { "version": "0.7.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/form-serialize/-/form-serialize-0.7.2.tgz", + "integrity": "sha512-ohEA4Crzd/+hSREjGf4kSsy73WhAtQ7H+blGEz2DVd+JCi0TV5nZBSn9PaPlvrl9m29fa6xclAfpRkqZ57b1bw==" }, "node_modules/form-storage": { "version": "1.3.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/form-storage/-/form-storage-1.3.5.tgz", + "integrity": "sha512-Pp9OE43Yy8DkBmk12Yf6i5HmWsNwDJ25IiON5JqaOrvfUE2fZQFYkGXbG9lIkum8h+JSURNulc/w6d56W9X3dA==", "dependencies": { "element-matches-polyfill": "^1.0.0", "form-serialize": "^0.7.2", @@ -3818,8 +4222,9 @@ } }, "node_modules/formBuilder": { - "version": "3.7.3", - "license": "MIT", + "version": "3.19.12", + "resolved": "https://registry.npmjs.org/formBuilder/-/formBuilder-3.19.12.tgz", + "integrity": "sha512-6oYlgADVLB5HirXW0suciSPEZ/LRx1YmNwFUFV4VN1r+lpEy2h0+nUoAqOaY2KG2r7jr9RuZJpN8A6N+0N4gfA==", "dependencies": { "jquery": ">=3.4.1", "jquery-ui-sortable": "*" @@ -3827,24 +4232,30 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/function-bind": { - "version": "1.1.1", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "license": "MIT" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { - "version": "1.1.5", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -3855,35 +4266,44 @@ }, "node_modules/functional-red-black-tree": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/functions-have-names": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/gensync": { "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6.9.0" } }, "node_modules/get-intrinsic": { - "version": "1.2.0", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, - "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3891,8 +4311,9 @@ }, "node_modules/get-stdin": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -3902,12 +4323,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -3917,15 +4340,17 @@ } }, "node_modules/glob": { - "version": "7.2.0", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -3938,8 +4363,9 @@ }, "node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "is-glob": "^4.0.1" @@ -3950,8 +4376,9 @@ }, "node_modules/global-modules": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "global-prefix": "^3.0.0" @@ -3962,8 +4389,9 @@ }, "node_modules/global-prefix": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ini": "^1.3.5", @@ -3976,8 +4404,9 @@ }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "isexe": "^2.0.0" @@ -3987,26 +4416,22 @@ } }, "node_modules/globals": { - "version": "13.12.1", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/globalthis": { - "version": "1.0.3", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, - "license": "MIT", "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -4017,8 +4442,9 @@ }, "node_modules/globby": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "array-union": "^2.1.0", @@ -4036,9 +4462,10 @@ } }, "node_modules/globby/node_modules/ignore": { - "version": "5.2.0", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 4" @@ -4046,14 +4473,16 @@ }, "node_modules/globjoin": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/gonzales-pe": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "minimist": "^1.2.5" @@ -4066,14 +4495,16 @@ } }, "node_modules/google-protobuf": { - "version": "3.21.2", - "dev": true, - "license": "(BSD-3-Clause AND Apache-2.0)" + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.4.tgz", + "integrity": "sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==", + "dev": true }, "node_modules/gopd": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, - "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -4083,55 +4514,49 @@ }, "node_modules/hard-rejection": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6" } }, - "node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-bigints": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { - "version": "4.0.0", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4141,8 +4566,9 @@ }, "node_modules/has-symbols": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4151,11 +4577,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, - "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -4164,17 +4591,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/highlight.js": { - "version": "11.4.0", - "license": "BSD-3-Clause", + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.10.0.tgz", + "integrity": "sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==", "engines": { "node": ">=12.0.0" } }, "node_modules/hosted-git-info": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "lru-cache": "^6.0.0" @@ -4183,19 +4624,44 @@ "node": ">=10" } }, - "node_modules/html-tags": { - "version": "3.1.0", + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/htmlparser2": { - "version": "3.10.1", + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "domelementtype": "^1.3.1", @@ -4208,22 +4674,25 @@ }, "node_modules/ignore": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 4" } }, "node_modules/immutable": { - "version": "4.2.4", - "dev": true, - "license": "MIT" + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true }, "node_modules/import-fresh": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "parent-module": "^1.0.0", @@ -4238,8 +4707,9 @@ }, "node_modules/import-lazy": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -4247,8 +4717,9 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.8.19" @@ -4256,8 +4727,9 @@ }, "node_modules/indent-string": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -4265,8 +4737,10 @@ }, "node_modules/inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "once": "^1.3.0", @@ -4275,20 +4749,25 @@ }, "node_modules/inherits": { "version": "2.0.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/inline-attachment": { - "version": "2.0.3" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inline-attachment/-/inline-attachment-2.0.3.tgz", + "integrity": "sha512-xUHGRUAVthQHdrdRTDtBAmelfL/3EuLKze8pC7BqtAlabPs8NaEvp8BtCdTLiqQuDZsBYPhbOzV9+G/FJVet6g==" }, "node_modules/inscrybmde": { "version": "1.11.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/inscrybmde/-/inscrybmde-1.11.6.tgz", + "integrity": "sha512-SDTiLRHvYKFYJMJNrnyUEOjHffZ90QfqLAH0Vab5zkZJLLX2FHMlGfgwYhPuqIuLYCFRGScqLWiOjv3L5lK3hw==", "dependencies": { "codemirror": "^5.33.0", "codemirror-spell-checker": "^1.1.2", @@ -4307,12 +4786,13 @@ } }, "node_modules/internal-slot": { - "version": "1.0.5", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -4321,8 +4801,9 @@ }, "node_modules/is-alphabetical": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true, - "license": "MIT", "peer": true, "funding": { "type": "github", @@ -4331,8 +4812,9 @@ }, "node_modules/is-alphanumerical": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "is-alphabetical": "^1.0.0", @@ -4345,8 +4827,9 @@ }, "node_modules/is-arguments": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.2", @@ -4360,13 +4843,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.1", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4374,14 +4860,32 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, - "license": "MIT", "peer": true }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "peer": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -4391,8 +4895,9 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -4406,6 +4911,8 @@ }, "node_modules/is-buffer": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true, "funding": [ { @@ -4421,7 +4928,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "peer": true, "engines": { "node": ">=4" @@ -4429,8 +4935,9 @@ }, "node_modules/is-callable": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4439,11 +4946,30 @@ } }, "node_modules/is-core-module": { - "version": "2.11.0", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, - "license": "MIT", "dependencies": { - "has": "^1.0.3" + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4451,8 +4977,9 @@ }, "node_modules/is-date-object": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -4465,8 +4992,9 @@ }, "node_modules/is-decimal": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true, - "license": "MIT", "peer": true, "funding": { "type": "github", @@ -4475,25 +5003,57 @@ }, "node_modules/is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "peer": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -4503,8 +5063,9 @@ }, "node_modules/is-hexadecimal": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true, - "license": "MIT", "peer": true, "funding": { "type": "github", @@ -4512,18 +5073,23 @@ } }, "node_modules/is-map": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, - "license": "MIT", "peer": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-negative-zero": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4533,17 +5099,19 @@ }, "node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { - "version": "1.0.6", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -4556,8 +5124,9 @@ }, "node_modules/is-plain-obj": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -4565,8 +5134,9 @@ }, "node_modules/is-regex": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -4580,28 +5150,37 @@ }, "node_modules/is-regexp": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6" } }, "node_modules/is-set": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, - "license": "MIT", "peer": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4609,8 +5188,9 @@ }, "node_modules/is-string": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -4623,8 +5203,9 @@ }, "node_modules/is-symbol": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -4636,15 +5217,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, - "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -4655,14 +5233,16 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -4672,18 +5252,23 @@ } }, "node_modules/is-weakmap": { - "version": "2.0.1", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, - "license": "MIT", "peer": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakref": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -4692,13 +5277,17 @@ } }, "node_modules/is-weakset": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4706,40 +5295,60 @@ }, "node_modules/isarray": { "version": "2.0.5", - "dev": true, - "license": "MIT", - "peer": true + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, - "license": "ISC", "peer": true }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "peer": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, "node_modules/jquery": { - "version": "3.6.0", - "license": "MIT" + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, "node_modules/jquery-ui": { - "version": "1.13.0", - "license": "MIT", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.14.0.tgz", + "integrity": "sha512-mPfYKBoRCf0MzaT2cyW5i3IuZ7PfTITaasO5OFLAQxrHuI+ZxruPa+4/K1OMNT8oElLWGtIxc9aRbyw20BKr8g==", "dependencies": { - "jquery": ">=1.8.0 <4.0.0" + "jquery": ">=1.12.0 <5.0.0" } }, "node_modules/jquery-ui-sortable": { "version": "1.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/jquery-ui-sortable/-/jquery-ui-sortable-1.0.0.tgz", + "integrity": "sha512-7xAUWoEJ/jHoj48ei8CCUtiad2uM3ie3IR2b3KB0Mpmb54IbBxzVb5vtrj0zqtd0GNQDImx+BPZml9QmK2EL3w==" }, "node_modules/js-tokens": { "version": "4.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "node_modules/js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "argparse": "^1.0.7", @@ -4751,8 +5360,9 @@ }, "node_modules/jsesc": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, - "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -4760,32 +5370,40 @@ "node": ">=4" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "peer": true + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/json5": { - "version": "2.2.0", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "license": "MIT", "peer": true, - "dependencies": { - "minimist": "^1.2.5" - }, "bin": { "json5": "lib/cli.js" }, @@ -4794,29 +5412,44 @@ } }, "node_modules/jsrender": { - "version": "v1.0.11", - "license": "MIT", + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/jsrender/-/jsrender-1.0.15.tgz", + "integrity": "sha512-OodS9veJzdkxj0zqWTEDyHm5MdwpeaBA11X3W06n3wTP7XifCv1JwaNpY6jn0KIltzgm3nM1Gi/tccslMEai1w==", "dependencies": { "through2": "^3.0.1" } }, "node_modules/jsx-ast-utils": { - "version": "3.3.3", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { "node": ">=4.0" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "peer": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -4824,33 +5457,41 @@ }, "node_modules/known-css-properties": { "version": "0.21.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz", + "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/language-subtag-registry": { - "version": "0.3.22", + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true, - "license": "CC0-1.0", "peer": true }, "node_modules/language-tags": { - "version": "1.0.5", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "language-subtag-registry": "~0.3.2" + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" } }, "node_modules/leaflet.featuregroup.subgroup": { "version": "1.0.2", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/leaflet.featuregroup.subgroup/-/leaflet.featuregroup.subgroup-1.0.2.tgz", + "integrity": "sha512-9nCVg8nUe686+BtPbUT7ALOe/IA+8Mum+rkA8pfPpCkH0WvKevRrH+JMcMTjAoNQKVI0uxrWrLV5w298SS3ESA==" }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "prelude-ls": "^1.2.1", @@ -4862,49 +5503,56 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/locate-path": { - "version": "2.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/lodash": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/lodash.debounce": { "version": "4.0.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/lodash.truncate": { "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "chalk": "^4.1.0", @@ -4917,10 +5565,87 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/longest-streak": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true, - "license": "MIT", "peer": true, "funding": { "type": "github", @@ -4929,8 +5654,9 @@ }, "node_modules/loose-envify": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -4940,21 +5666,19 @@ } }, "node_modules/lru-cache": { - "version": "6.0.0", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "license": "ISC", - "peer": true, "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "yallist": "^3.0.2" } }, "node_modules/map-obj": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -4976,8 +5700,9 @@ }, "node_modules/mathml-tag-names": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true, - "license": "MIT", "peer": true, "funding": { "type": "github", @@ -4986,8 +5711,9 @@ }, "node_modules/mdast-util-from-markdown": { "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/mdast": "^3.0.0", @@ -5003,8 +5729,9 @@ }, "node_modules/mdast-util-to-markdown": { "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/unist": "^2.0.0", @@ -5021,8 +5748,9 @@ }, "node_modules/mdast-util-to-string": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true, - "license": "MIT", "peer": true, "funding": { "type": "opencollective", @@ -5031,8 +5759,9 @@ }, "node_modules/meow": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/minimist": "^1.2.0", @@ -5055,22 +5784,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 8" @@ -5078,6 +5796,8 @@ }, "node_modules/micromark": { "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", "dev": true, "funding": [ { @@ -5089,7 +5809,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "peer": true, "dependencies": { "debug": "^4.0.0", @@ -5097,13 +5816,14 @@ } }, "node_modules/micromatch": { - "version": "4.0.4", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" @@ -5111,8 +5831,9 @@ }, "node_modules/min-indent": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=4" @@ -5120,8 +5841,9 @@ }, "node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5130,14 +5852,19 @@ } }, "node_modules/minimist": { - "version": "1.2.5", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, - "license": "MIT" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/minimist-options": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "arrify": "^1.0.1", @@ -5150,24 +5877,28 @@ }, "node_modules/ms": { "version": "2.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/natural-compare": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/node-releases": { - "version": "2.0.10", - "dev": true, - "license": "MIT" + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true }, "node_modules/normalize-package-data": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { "hosted-git-info": "^4.0.1", @@ -5179,10 +5910,24 @@ "node": ">=10" } }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/normalize-range": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -5190,39 +5935,47 @@ }, "node_modules/normalize-selector": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/num2fraction": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/object-assign": { "version": "4.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { - "version": "1.12.3", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, - "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-is": { - "version": "1.1.5", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -5233,19 +5986,21 @@ }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { - "version": "4.1.4", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -5257,28 +6012,30 @@ } }, "node_modules/object.entries": { - "version": "1.1.6", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.6", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -5287,27 +6044,29 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.hasown": { - "version": "1.1.2", + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.6", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -5318,17 +6077,19 @@ }, "node_modules/once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "wrappy": "1" } }, "node_modules/optionator": { - "version": "0.9.1", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "deep-is": "^0.1.3", @@ -5336,46 +6097,56 @@ "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/p-limit": { - "version": "1.3.0", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "p-try": "^1.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "2.0.0", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "p-limit": "^1.1.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/p-try": { - "version": "1.0.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "license": "MIT", + "peer": true, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "callsites": "^3.0.0" @@ -5386,8 +6157,9 @@ }, "node_modules/parse-entities": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "character-entities": "^1.0.0", @@ -5404,8 +6176,9 @@ }, "node_modules/parse-json": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@babel/code-frame": "^7.0.0", @@ -5421,17 +6194,20 @@ } }, "node_modules/path-exists": { - "version": "3.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", + "peer": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -5439,8 +6215,9 @@ }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -5448,28 +6225,31 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" } }, "node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC", - "peer": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8.6" @@ -5478,10 +6258,20 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "picocolors": "^0.2.1", @@ -5497,8 +6287,9 @@ }, "node_modules/postcss-html": { "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "htmlparser2": "^3.10.0" @@ -5510,8 +6301,9 @@ }, "node_modules/postcss-less": { "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "postcss": "^7.0.14" @@ -5522,20 +6314,23 @@ }, "node_modules/postcss-media-query-parser": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.1", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.5.tgz", + "integrity": "sha512-tum2m18S22ZSNjXatMG0FSk5ZL83pTttymeJx5Gzxg7RU0s1jNDU9rXltro4osQrukjyNormcb07IEjqEyPNaA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/postcss-safe-parser": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "postcss": "^7.0.26" @@ -5546,8 +6341,9 @@ }, "node_modules/postcss-sass": { "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "gonzales-pe": "^4.3.0", @@ -5556,8 +6352,9 @@ }, "node_modules/postcss-scss": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "postcss": "^7.0.6" @@ -5567,9 +6364,10 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.9", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "cssesc": "^3.0.0", @@ -5581,8 +6379,9 @@ }, "node_modules/postcss-syntax": { "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", "dev": true, - "license": "MIT", "peer": true, "peerDependencies": { "postcss": ">=5.0.0" @@ -5590,23 +6389,23 @@ }, "node_modules/postcss-value-parser": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true, - "license": "MIT", "peer": true }, - "node_modules/postcss/node_modules/source-map": { - "version": "0.6.1", + "node_modules/postcss/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": ">=0.10.0" - } + "peer": true }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.8.0" @@ -5614,8 +6413,9 @@ }, "node_modules/progress": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.4.0" @@ -5623,8 +6423,9 @@ }, "node_modules/prop-types": { "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "loose-envify": "^1.4.0", @@ -5633,9 +6434,10 @@ } }, "node_modules/punycode": { - "version": "2.1.1", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6" @@ -5643,7 +6445,8 @@ }, "node_modules/query-string": { "version": "5.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "dependencies": { "decode-uri-component": "^0.2.0", "object-assign": "^4.1.0", @@ -5655,7 +6458,8 @@ }, "node_modules/query-string-es5": { "version": "6.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/query-string-es5/-/query-string-es5-6.1.4.tgz", + "integrity": "sha512-pMdQETPqMQO+OUd2t3hUxBV8REa6w+iyD+o87M1qc1Vj3jBkQIIw3aZc+6rxlRTDxZ5ac+w0rGE/p4JIt2Xupg==", "dependencies": { "decode-uri-component": "^0.2.0", "strict-uri-encode": "^2.0.0" @@ -5666,13 +6470,16 @@ }, "node_modules/query-string-es5/node_modules/strict-uri-encode": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", "engines": { "node": ">=4" } }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -5688,13 +6495,13 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "peer": true }, "node_modules/quick-lru": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -5702,14 +6509,16 @@ }, "node_modules/react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/read-pkg": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/normalize-package-data": "^2.4.0", @@ -5723,8 +6532,9 @@ }, "node_modules/read-pkg-up": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "find-up": "^4.1.0", @@ -5738,80 +6548,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "license": "(MIT OR CC0-1.0)", "peer": true, "engines": { "node": ">=8" @@ -5819,14 +6560,16 @@ }, "node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { "hosted-git-info": "^2.1.4", @@ -5836,9 +6579,10 @@ } }, "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.1", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", "peer": true, "bin": { "semver": "bin/semver" @@ -5846,16 +6590,18 @@ }, "node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "license": "(MIT OR CC0-1.0)", "peer": true, "engines": { "node": ">=8" } }, "node_modules/readable-stream": { - "version": "3.6.0", - "license": "MIT", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -5867,8 +6613,9 @@ }, "node_modules/redent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "indent-string": "^4.0.0", @@ -5878,15 +6625,39 @@ "node": ">=8" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerate": { "version": "1.4.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, - "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -5895,26 +6666,30 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "dev": true, - "license": "MIT" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true }, "node_modules/regenerator-transform": { - "version": "0.15.1", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -5925,8 +6700,9 @@ }, "node_modules/regexpp": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -5936,9 +6712,10 @@ } }, "node_modules/regexpu-core": { - "version": "5.3.1", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", @@ -5953,8 +6730,9 @@ }, "node_modules/regjsparser": { "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "jsesc": "~0.5.0" }, @@ -5964,6 +6742,8 @@ }, "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true, "bin": { "jsesc": "bin/jsesc" @@ -5971,8 +6751,9 @@ }, "node_modules/remark": { "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "remark-parse": "^9.0.0", @@ -5986,8 +6767,9 @@ }, "node_modules/remark-parse": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "mdast-util-from-markdown": "^0.8.0" @@ -5999,8 +6781,9 @@ }, "node_modules/remark-stringify": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", + "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "mdast-util-to-markdown": "^0.6.0" @@ -6012,8 +6795,9 @@ }, "node_modules/repeat-string": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10" @@ -6021,19 +6805,21 @@ }, "node_modules/require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { - "version": "1.22.0", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "license": "MIT", "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -6046,8 +6832,9 @@ }, "node_modules/resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=4" @@ -6055,8 +6842,9 @@ }, "node_modules/reusify": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "iojs": ">=1.0.0", @@ -6065,8 +6853,10 @@ }, "node_modules/rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "glob": "^7.1.3" @@ -6080,6 +6870,8 @@ }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -6095,22 +6887,42 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "peer": true, "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rxjs": { - "version": "7.8.0", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -6124,26 +6936,30 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/safe-regex-test": { - "version": "1.0.0", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/sass-embedded": { "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.57.1.tgz", + "integrity": "sha512-O0s796x76bRSJIdmJ4lrK+zJLtF3XeP+0tbJzR4NAPSDnWqHLk2boUYSdfx4DnF4x9rGmcVlMWFE8UvnLMNCmw==", "dev": true, - "license": "MIT", "dependencies": { "buffer-builder": "^0.2.0", "google-protobuf": "^3.11.4", @@ -6165,13 +6981,94 @@ "sass-embedded-win32-x64": "1.57.1" } }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.57.1.tgz", + "integrity": "sha512-YSfrLZkM2HdXETQdSznv2DN2GdkmBNWLAlHfDWe0toSEIB2C2YGuoqHYZtl6PBYqu8k8FH4TDyct8VzoIa+rMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.57.1.tgz", + "integrity": "sha512-xq2Au8CRLHQ+MqH2p8gQn9rYGtfQ8voCWMRz7klYmmh5kXHFjefG3opPPB8mJeSc3SIqE35SQxQEIhUbsxozpg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.57.1.tgz", + "integrity": "sha512-s+roBIgiQSg8124JmYmiSw4THWRvkF2BOclBZCb+OFLa8ZTak2WZdGs0PhqkMmZypxQ7cewh9ts+sOWN24yIrw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.57.1.tgz", + "integrity": "sha512-R0GqVqf0xEhQ5nDbj7vqmKw+/1kqiURNBl0pD4uv4inBed2YKg+7agn7Y5XE5GUWbgOz7ubjL2kt4Glr7K7xeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-ia32": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.57.1.tgz", + "integrity": "sha512-gKqMpfcjrW4S1m+cuRn88oUkr/HMv48CqyCHnfGCsrkTpIft33a1ZKW2jWm09rwmR0g/G6yGstoQO0iHWJWxuQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/sass-embedded-linux-x64": { "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.57.1.tgz", + "integrity": "sha512-AI6CrcuLWP22RXhVrZUN2JfdQ7YdFR30dA4twYwp/Q4hUfj85dJrVD5ORi8G04haMWPOQiFV6pBcMgzpiY2Bog==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -6180,10 +7077,52 @@ "node": ">=14.0.0" } }, + "node_modules/sass-embedded-win32-ia32": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.57.1.tgz", + "integrity": "sha512-s7EhJLG9AnJNBga3I+W0rk6y/1n/i0XD34rvqR3yJgBhNKkI5rVCxFN7FAcGR50vQQbCO1MrUCmuVvld+2qvyQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.57.1.tgz", + "integrity": "sha512-b/Kgz7ADPTlPITk8e47Zf3eiuXlTGhi/eWsAoesUmkjR7jayvFNLHPhThgiRAxkzT6UlWI3Dzr+E3OBqUjegEg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/sass-embedded/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6196,27 +7135,55 @@ }, "node_modules/select2": { "version": "4.1.0-rc.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/select2/-/select2-4.1.0-rc.0.tgz", + "integrity": "sha512-Hr9TdhyHCZUtwznEH2CBf7967mEM0idtJ5nMtjvk3Up5tPukOLXbHUNmh10oRfeNIhj+3GD3niu+g6sVK+gK0A==" }, "node_modules/semver": { - "version": "7.3.5", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, - "node_modules/shebang-command": { + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "shebang-regex": "^3.0.0" @@ -6227,21 +7194,27 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" } }, "node_modules/side-channel": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6249,14 +7222,16 @@ }, "node_modules/signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -6264,8 +7239,9 @@ }, "node_modules/slice-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ansi-styles": "^4.0.0", @@ -6279,10 +7255,57 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/spdx-correct": { - "version": "3.1.1", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "spdx-expression-parse": "^3.0.0", @@ -6290,15 +7313,17 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, - "license": "CC-BY-3.0", "peer": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "spdx-exceptions": "^2.1.0", @@ -6306,15 +7331,17 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.11", + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", "dev": true, - "license": "CC0-1.0", "peer": true }, "node_modules/specificity": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", "dev": true, - "license": "MIT", "peer": true, "bin": { "specificity": "bin/specificity" @@ -6322,14 +7349,16 @@ }, "node_modules/sprintf-js": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, - "license": "BSD-3-Clause", "peer": true }, "node_modules/stop-iteration-iterator": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "internal-slot": "^1.0.4" @@ -6340,22 +7369,25 @@ }, "node_modules/strict-uri-encode": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/string_decoder": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "emoji-regex": "^8.0.0", @@ -6366,46 +7398,106 @@ "node": ">=8" } }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "peer": true + }, + "node_modules/string.prototype.includes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz", + "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==", + "dev": true, + "peer": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.matchall": { - "version": "4.0.8", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "peer": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6413,8 +7505,9 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ansi-regex": "^5.0.1" @@ -6425,16 +7518,18 @@ }, "node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/strip-indent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "min-indent": "^1.0.0" @@ -6445,8 +7540,9 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -6457,14 +7553,16 @@ }, "node_modules/style-search": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/stylelint": { "version": "13.11.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.11.0.tgz", + "integrity": "sha512-DhrKSWDWGZkCiQMtU+VroXM6LWJVC8hSK24nrUngTSQvXGK75yZUq4yNpynqrxD3a/fzKMED09V+XxO4z4lTbw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@stylelint/postcss-css-in-js": "^0.37.2", @@ -6527,10 +7625,74 @@ "url": "https://opencollective.com/stylelint" } }, + "node_modules/stylelint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/stylelint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/stylelint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/stylelint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/stylelint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/stylelint/node_modules/ignore": { - "version": "5.2.0", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 4" @@ -6538,38 +7700,54 @@ }, "node_modules/stylelint/node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" } }, "node_modules/sugarss": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "postcss": "^7.0.2" } }, "node_modules/supports-color": { - "version": "7.2.0", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6579,13 +7757,16 @@ }, "node_modules/svg-tags": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true, "peer": true }, "node_modules/table": { - "version": "6.8.0", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, - "license": "BSD-3-Clause", "peer": true, "dependencies": { "ajv": "^8.0.1", @@ -6599,15 +7780,16 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.10.0", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -6616,19 +7798,22 @@ }, "node_modules/table/node_modules/json-schema-traverse": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/text-table": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/through2": { "version": "3.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", "dependencies": { "inherits": "^2.0.4", "readable-stream": "2 || 3" @@ -6636,16 +7821,18 @@ }, "node_modules/to-fast-properties": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "is-number": "^7.0.0" @@ -6656,8 +7843,9 @@ }, "node_modules/trim-newlines": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -6665,8 +7853,9 @@ }, "node_modules/trough": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "dev": true, - "license": "MIT", "peer": true, "funding": { "type": "github", @@ -6674,20 +7863,22 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.12.0", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", + "json5": "^1.0.2", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -6696,14 +7887,16 @@ } }, "node_modules/tslib": { - "version": "2.5.0", - "dev": true, - "license": "0BSD" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "prelude-ls": "^1.2.1" @@ -6713,9 +7906,10 @@ } }, "node_modules/type-fest": { - "version": "0.20.2", + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "license": "(MIT OR CC0-1.0)", "peer": true, "engines": { "node": ">=10" @@ -6724,14 +7918,74 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typed-array-length": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6739,21 +7993,24 @@ }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "is-typedarray": "^1.0.0" } }, "node_modules/typo-js": { - "version": "1.2.1", - "license": "BSD-3-Clause" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/typo-js/-/typo-js-1.2.4.tgz", + "integrity": "sha512-Oy/k+tFle5NAA3J/yrrYGfvEnPVrDZ8s8/WCwjUE75k331QyKIsFss7byQ/PzBmXLY6h1moRnZbnaxWBe3I3CA==" }, "node_modules/unbox-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -6766,16 +8023,18 @@ }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, - "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -6786,24 +8045,27 @@ }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unified": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "bail": "^1.0.0", @@ -6820,8 +8082,9 @@ }, "node_modules/unified/node_modules/is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -6829,8 +8092,9 @@ }, "node_modules/unist-util-find-all-after": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", + "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "unist-util-is": "^4.0.0" @@ -6842,8 +8106,9 @@ }, "node_modules/unist-util-is": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", "dev": true, - "license": "MIT", "peer": true, "funding": { "type": "opencollective", @@ -6852,8 +8117,9 @@ }, "node_modules/unist-util-stringify-position": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/unist": "^2.0.2" @@ -6864,7 +8130,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -6874,29 +8142,28 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" } }, - "node_modules/update-browserslist-db/node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { "punycode": "^2.1.0" @@ -6904,18 +8171,21 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/v8-compile-cache": { - "version": "2.3.0", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "spdx-correct": "^3.0.0", @@ -6924,8 +8194,9 @@ }, "node_modules/vfile": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/unist": "^2.0.0", @@ -6940,8 +8211,9 @@ }, "node_modules/vfile-message": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/unist": "^2.0.0", @@ -6954,8 +8226,9 @@ }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "isexe": "^2.0.0" @@ -6969,8 +8242,9 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -6982,32 +8256,63 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-collection": { - "version": "1.0.1", + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-typed-array": { - "version": "1.1.9", + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7017,9 +8322,10 @@ } }, "node_modules/word-wrap": { - "version": "1.2.3", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -7027,14 +8333,16 @@ }, "node_modules/wrappy": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/write-file-atomic": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "imurmurhash": "^0.1.4", @@ -7044,15 +8352,16 @@ } }, "node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "peer": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, - "license": "ISC", "peer": true, "engines": { "node": ">= 6" @@ -7060,8 +8369,9 @@ }, "node_modules/yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "ISC", "peer": true, "engines": { "node": ">=10" @@ -7069,8 +8379,9 @@ }, "node_modules/zwitch": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "dev": true, - "license": "MIT", "peer": true, "funding": { "type": "github", @@ -7080,524 +8391,363 @@ }, "dependencies": { "@ampproject/remapping": { - "version": "2.1.1", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "peer": true, "requires": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, "@babel/code-frame": { - "version": "7.12.11", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, - "peer": true, "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" } }, "@babel/compat-data": { - "version": "7.20.14", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", "dev": true }, "@babel/core": { - "version": "7.17.2", - "dev": true, - "peer": true, - "requires": { - "@ampproject/remapping": "^2.0.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.2", - "@babel/parser": "^7.17.0", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "peer": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "dev": true, - "peer": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "semver": { - "version": "6.3.0", - "dev": true, - "peer": true - } + "json5": "^2.2.3", + "semver": "^6.3.1" } }, "@babel/eslint-parser": { - "version": "7.19.1", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz", + "integrity": "sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==", "dev": true, "requires": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } + "semver": "^6.3.1" } }, "@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", "dev": true, "requires": { - "@babel/types": "^7.23.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" } }, "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dev": true, "requires": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" } }, "@babel/helper-compilation-targets": { - "version": "7.20.7", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dev": true, "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "semver": { - "version": "6.3.0", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "dev": true - } + "semver": "^6.3.1" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", + "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.0", "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.20.5", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.2.1" + "@babel/helper-annotate-as-pure": "^7.24.7", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" } }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" + "resolve": "^1.14.2" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", "dev": true, "requires": { - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" } }, "@babel/helper-module-imports": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" } }, "@babel/helper-module-transforms": { - "version": "7.20.11", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" } }, "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", "dev": true, "requires": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" } }, "@babel/helper-plugin-utils": { - "version": "7.20.2", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" } }, "@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" } }, "@babel/helper-simple-access": { - "version": "7.20.2", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dev": true, "requires": { - "@babel/types": "^7.20.2" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", "dev": true, "requires": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" } }, "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.18.6", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.20.5", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" } }, "@babel/helpers": { - "version": "7.17.2", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", "dev": true, "peer": true, "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" } }, "@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" } }, "@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/types": "^7.25.2" } }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" } }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", + "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.20.7", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "@babel/helper-plugin-utils": "^7.24.8" } }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.24.8" } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", "dev": true, "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" } }, - "@babel/plugin-proposal-optional-catch-binding": { + "@babel/plugin-proposal-class-properties": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.20.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-proposal-private-methods": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -7616,16 +8766,10 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -7633,6 +8777,8 @@ }, "@babel/plugin-syntax-class-properties": { "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" @@ -7640,6 +8786,8 @@ }, "@babel/plugin-syntax-class-static-block": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" @@ -7647,6 +8795,8 @@ }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -7654,34 +8804,62 @@ }, "@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-jsx": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" @@ -7689,6 +8867,8 @@ }, "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -7696,6 +8876,8 @@ }, "@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" @@ -7703,6 +8885,8 @@ }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -7710,6 +8894,8 @@ }, "@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -7717,6 +8903,8 @@ }, "@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -7724,6 +8912,8 @@ }, "@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" @@ -7731,350 +8921,593 @@ }, "@babel/plugin-syntax-top-level-await": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, "@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", + "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.0" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.20.15", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.24.8" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-transform-classes": { - "version": "7.20.7", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", + "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.0", "globals": "^11.1.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "dev": true - } } }, "@babel/plugin-transform-computed-properties": { - "version": "7.20.7", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" } }, "@babel/plugin-transform-destructuring": { - "version": "7.20.7", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", + "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-transform-for-of": { - "version": "7.18.8", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" } }, "@babel/plugin-transform-function-name": { - "version": "7.18.9", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-transform-literals": { - "version": "7.18.9", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.8" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.20.11", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.20.11", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-new-target": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.7" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7" } }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", + "@babel/plugin-transform-private-methods": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, - "@babel/plugin-transform-parameters": { - "version": "7.20.7", + "@babel/plugin-transform-private-property-in-object": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-transform-property-literals": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", + "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.20.13", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz", + "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.20.7" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/types": "^7.25.2" } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", + "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", "dev": true, "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" + "@babel/plugin-transform-react-jsx": "^7.24.7" } }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", + "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-regenerator": { - "version": "7.20.5", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" + "@babel/helper-plugin-utils": "^7.24.7", + "regenerator-transform": "^0.15.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-runtime": { - "version": "7.19.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-spread": { - "version": "7.20.7", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-template-literals": { - "version": "7.18.9", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, - "@babel/preset-env": { - "version": "7.20.2", + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", "dev": true, "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/preset-env": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", + "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -8084,264 +9517,147 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.37.1", + "semver": "^6.3.1" }, "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "requires": {} } } }, "@babel/preset-modules": { - "version": "0.1.5", + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" } }, "@babel/preset-react": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", + "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-transform-react-display-name": "^7.24.7", + "@babel/plugin-transform-react-jsx": "^7.24.7", + "@babel/plugin-transform-react-jsx-development": "^7.24.7", + "@babel/plugin-transform-react-pure-annotations": "^7.24.7" } }, "@babel/regjsgen": { "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", "dev": true }, "@babel/runtime": { - "version": "7.20.13", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" } }, "@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dev": true, "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "requires": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" } }, "@babel/traverse": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", - "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.3", - "@babel/types": "^7.23.3", - "debug": "^4.1.0", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", "globals": "^11.1.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "requires": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "globals": { - "version": "11.12.0", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "@babel/types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", - "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" } }, @@ -8370,6 +9686,8 @@ }, "@eslint/eslintrc": { "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "peer": true, "requires": { @@ -8382,10 +9700,31 @@ "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "peer": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "peer": true + } } }, "@humanwhocodes/config-array": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dev": true, "peer": true, "requires": { @@ -8396,40 +9735,54 @@ }, "@humanwhocodes/object-schema": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true, "peer": true }, "@jridgewell/gen-mapping": { - "version": "0.3.2", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" } }, "@jridgewell/resolve-uri": { - "version": "3.1.0", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true }, "@jridgewell/set-array": { - "version": "1.1.2", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true }, "@jridgewell/sourcemap-codec": { - "version": "1.4.14", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.17", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", "dev": true, "requires": { "eslint-scope": "5.1.1" @@ -8437,6 +9790,8 @@ }, "@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "peer": true, "requires": { @@ -8446,11 +9801,15 @@ }, "@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "peer": true }, "@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "peer": true, "requires": { @@ -8464,15 +9823,19 @@ "integrity": "sha512-F6S74NGpxhbbDRFsQFGYqefRfZPgYvePNtz9hHKYOqLturrsqrDoG+UcrxEGHsvqDUorMYfx4Wl3K8smmk/u2g==" }, "@stylelint/postcss-css-in-js": { - "version": "0.37.2", + "version": "0.37.3", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.3.tgz", + "integrity": "sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==", "dev": true, "peer": true, "requires": { - "@babel/core": ">=7.9.0" + "@babel/core": "^7.17.9" } }, "@stylelint/postcss-markdown": { "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", + "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", "dev": true, "peer": true, "requires": { @@ -8482,49 +9845,67 @@ }, "@types/json5": { "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, "@types/mdast": { - "version": "3.0.10", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", "dev": true, "peer": true, "requires": { - "@types/unist": "*" + "@types/unist": "^2" } }, "@types/minimist": { - "version": "1.2.2", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true, "peer": true }, "@types/normalize-package-data": { - "version": "2.4.1", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, "peer": true }, "@types/parse-json": { - "version": "4.0.0", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "dev": true, "peer": true }, "@types/unist": { - "version": "2.0.6", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true, "peer": true }, "acorn": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, "peer": true }, "acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "peer": true, "requires": {} }, "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "peer": true, "requires": { @@ -8535,25 +9916,32 @@ } }, "ansi-colors": { - "version": "4.1.1", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, "peer": true }, "ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "peer": true }, "ansi-styles": { - "version": "4.3.0", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "peer": true, "requires": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" } }, "argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "peer": true, "requires": { @@ -8562,77 +9950,153 @@ }, "aria-query": { "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dev": true, "peer": true, "requires": { "deep-equal": "^2.0.5" } }, + "array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + } + }, "array-includes": { - "version": "3.1.6", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" } }, "array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "peer": true }, - "array.prototype.flat": { + "array.prototype.findlast": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" } }, "array.prototype.flatmap": { - "version": "1.3.1", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, - "peer": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" } }, "array.prototype.tosorted": { - "version": "1.1.1", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" } }, "arrify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "peer": true }, "ast-types-flow": { - "version": "0.0.7", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true, "peer": true }, "astral-regex": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, "peer": true }, "autoprefixer": { "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", "dev": true, "peer": true, "requires": { @@ -8643,18 +10107,36 @@ "picocolors": "^0.2.1", "postcss": "^7.0.32", "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true, + "peer": true + } } }, "available-typed-arrays": { - "version": "1.0.5", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "requires": { + "possible-typed-array-names": "^1.0.0" + } }, "axe-core": { - "version": "4.6.3", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz", + "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==", "dev": true }, "axobject-query": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", "dev": true, "peer": true, "requires": { @@ -8662,46 +10144,52 @@ } }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" } }, "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" + "@babel/helper-define-polyfill-provider": "^0.6.2" } }, "bail": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", "dev": true, "peer": true }, "balanced-match": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -8709,47 +10197,64 @@ } }, "braces": { - "version": "3.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "peer": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browserslist": { - "version": "4.21.5", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" } }, "buffer-builder": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", + "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", "dev": true }, "call-bind": { - "version": "1.0.2", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" } }, "callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "peer": true }, "camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "peer": true }, "camelcase-keys": { "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "peer": true, "requires": { @@ -8759,35 +10264,47 @@ } }, "caniuse-lite": { - "version": "1.0.30001456", + "version": "1.0.30001651", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", + "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", "dev": true }, "chalk": { - "version": "4.1.2", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "peer": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "character-entities": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true, "peer": true }, "character-entities-legacy": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "dev": true, "peer": true }, "character-reference-invalid": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "dev": true, "peer": true }, "clone-regexp": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", "dev": true, "peer": true, "requires": { @@ -8795,55 +10312,59 @@ } }, "codemirror": { - "version": "5.65.0" + "version": "5.65.17", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.17.tgz", + "integrity": "sha512-1zOsUx3lzAOu/gnMAZkQ9kpIHcPYOc9y1Fbm2UVk5UBPkdq380nhkelG0qUwm1f7wPvTbndu9ZYlug35EwAZRQ==" }, "codemirror-spell-checker": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/codemirror-spell-checker/-/codemirror-spell-checker-1.1.2.tgz", + "integrity": "sha512-2Tl6n0v+GJRsC9K3MLCdLaMOmvWL0uukajNJseorZJsslaxZyZMgENocPU8R0DyoTAiKsyqiemSOZo7kjGV0LQ==", "requires": { "typo-js": "*" } }, "color-convert": { - "version": "2.0.1", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "peer": true, "requires": { - "color-name": "~1.1.4" + "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.4", - "dev": true, - "peer": true - }, - "concat-map": { - "version": "0.0.1", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "convert-source-map": { - "version": "1.8.0", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - } - } + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "peer": true }, "core-js-compat": { - "version": "3.28.0", + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz", + "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==", "dev": true, "requires": { - "browserslist": "^4.21.5" + "browserslist": "^4.23.3" } }, "cosmiconfig": { - "version": "7.0.1", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "peer": true, "requires": { @@ -8856,6 +10377,8 @@ }, "cross-spawn": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "peer": true, "requires": { @@ -8866,16 +10389,55 @@ }, "cssesc": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, "peer": true }, "damerau-levenshtein": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true, "peer": true }, + "data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, "debug": { - "version": "4.3.3", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dev": true, "requires": { "ms": "2.1.2" @@ -8883,11 +10445,15 @@ }, "decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "peer": true }, "decamelize-keys": { - "version": "1.1.0", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "peer": true, "requires": { @@ -8897,24 +10463,31 @@ "dependencies": { "map-obj": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "peer": true } } }, "decode-uri-component": { - "version": "0.2.0" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" }, "deep-equal": { - "version": "2.2.0", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", + "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", @@ -8922,28 +10495,46 @@ "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.1", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.13" } }, "deep-is": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "peer": true }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, "define-properties": { - "version": "1.2.0", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "requires": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "peer": true, "requires": { @@ -8952,6 +10543,8 @@ }, "doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "peer": true, "requires": { @@ -8960,6 +10553,8 @@ }, "dom-serializer": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, "peer": true, "requires": { @@ -8968,12 +10563,16 @@ }, "dependencies": { "domelementtype": { - "version": "2.2.0", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "peer": true }, "entities": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, "peer": true } @@ -8981,11 +10580,15 @@ }, "domelementtype": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true, "peer": true }, "domhandler": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dev": true, "peer": true, "requires": { @@ -8994,6 +10597,8 @@ }, "domutils": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, "peer": true, "requires": { @@ -9002,32 +10607,45 @@ } }, "electron-to-chromium": { - "version": "1.4.301", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.5.tgz", + "integrity": "sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA==", "dev": true }, "element-matches-polyfill": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/element-matches-polyfill/-/element-matches-polyfill-1.0.0.tgz", + "integrity": "sha512-6xnaB9NpWYmSgWP1/njuCanX1nopjVZRvSivd9cX7cfURGdldeT46g+3ph1pfNNiiPvHLjfhUk/8HXQkbcu7ng==" }, "emoji-regex": { - "version": "8.0.0", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "peer": true }, "enquirer": { - "version": "2.3.6", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "peer": true, "requires": { - "ansi-colors": "^4.1.1" + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" } }, "entities": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true, "peer": true }, "error-ex": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "peer": true, "requires": { @@ -9035,46 +10653,78 @@ } }, "es-abstract": { - "version": "1.21.1", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "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", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.13.1", "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.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.15" + } + }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.4" } }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, "es-get-iterator": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, "peer": true, "requires": { @@ -9089,25 +10739,62 @@ "stop-iteration-iterator": "^1.0.0" } }, + "es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + } + }, + "es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, "es-set-tostringtag": { - "version": "2.0.1", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" } }, "es-shim-unscopables": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, - "peer": true, "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "es-to-primitive": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", @@ -9116,16 +10803,21 @@ } }, "escalade": { - "version": "3.1.1", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true }, "escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "peer": true + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true }, "eslint": { "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "peer": true, "requires": { @@ -9169,28 +10861,135 @@ "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "peer": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "peer": true + }, + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "peer": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "peer": true + } } }, "eslint-config-prettier": { - "version": "8.3.0", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, "requires": {} }, "eslint-config-standard": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-11.0.0.tgz", + "integrity": "sha512-oDdENzpViEe5fwuRCWla7AXQd++/oyIp8zP+iP9jiUPG6NBj3SHgdgtl/kTn00AjeN+1HNvavTKmYbMo+xMOlw==", "dev": true, "requires": {} }, "eslint-import-resolver-node": { - "version": "0.3.6", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "requires": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" }, "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -9199,15 +10998,18 @@ } }, "eslint-module-utils": { - "version": "2.7.3", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" + "debug": "^3.2.7" }, "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -9217,6 +11019,8 @@ }, "eslint-plugin-es": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, "peer": true, "requires": { @@ -9225,81 +11029,79 @@ } }, "eslint-plugin-import": { - "version": "2.25.4", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", - "has": "^1.0.3", - "is-core-module": "^2.8.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" }, "dependencies": { "debug": { - "version": "2.6.9", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { "esutils": "^2.0.2" } - }, - "ms": { - "version": "2.0.0", - "dev": true } } }, "eslint-plugin-jsx-a11y": { - "version": "6.7.1", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz", + "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==", "dev": true, "peer": true, "requires": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", + "aria-query": "~5.1.3", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.9.1", + "axobject-query": "~3.1.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", + "es-iterator-helpers": "^1.0.19", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "dependencies": { - "emoji-regex": { - "version": "9.2.2", - "dev": true, - "peer": true - }, - "semver": { - "version": "6.3.0", - "dev": true, - "peer": true - } + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.0" } }, "eslint-plugin-node": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, "peer": true, "requires": { @@ -9312,12 +11114,9 @@ }, "dependencies": { "ignore": { - "version": "5.2.0", - "dev": true, - "peer": true - }, - "semver": { - "version": "6.3.0", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "peer": true } @@ -9325,76 +11124,91 @@ }, "eslint-plugin-promise": { "version": "3.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz", + "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==", "dev": true, "peer": true }, "eslint-plugin-react": { - "version": "7.32.2", + "version": "7.35.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz", + "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==", "dev": true, "peer": true, "requires": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" }, "dependencies": { "doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "peer": true, "requires": { "esutils": "^2.0.2" } }, - "estraverse": { - "version": "5.3.0", - "dev": true, - "peer": true - }, "resolve": { - "version": "2.0.0-next.4", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "peer": true, "requires": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } - }, - "semver": { - "version": "6.3.0", - "dev": true, - "peer": true } } }, "eslint-plugin-standard": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.1.0.tgz", + "integrity": "sha512-fVcdyuKRr0EZ4fjWl3c+gp1BANFJD1+RaWa2UPYfMZ6jCtp5RG00kSaXnK/dE5sYzt4kaWJ9qdxqUfc0d9kX0w==", "dev": true, "requires": {} }, "eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } } }, "eslint-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "peer": true, "requires": { @@ -9403,6 +11217,8 @@ "dependencies": { "eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "peer": true } @@ -9410,10 +11226,14 @@ }, "eslint-visitor-keys": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "espree": { "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "peer": true, "requires": { @@ -9424,6 +11244,8 @@ "dependencies": { "eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "peer": true } @@ -9431,50 +11253,51 @@ }, "esprima": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "peer": true }, "esquery": { - "version": "1.4.0", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "peer": true, "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true, - "peer": true - } } }, "esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } } }, "estraverse": { - "version": "4.3.0", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "europa": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/europa/-/europa-4.0.0.tgz", + "integrity": "sha512-Oy3gJqAjv7zmspU68qwjoVCJ2PmhJi1tgGtiHJt1BRK2Ve5QfRe18A8jHO5te6DZoDTcfN6gUfa2fWOyLebvgw==" }, "execall": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", "dev": true, "peer": true, "requires": { @@ -9483,16 +11306,22 @@ }, "extend": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true, "peer": true }, "fast-deep-equal": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "peer": true }, "fast-glob": { - "version": "3.2.11", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "peer": true, "requires": { @@ -9505,21 +11334,36 @@ }, "fast-json-stable-stringify": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "peer": true }, "fast-levenshtein": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "peer": true + }, + "fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", "dev": true, "peer": true }, "fastest-levenshtein": { - "version": "1.0.12", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, "peer": true }, "fastq": { - "version": "1.13.0", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "peer": true, "requires": { @@ -9528,6 +11372,8 @@ }, "file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "peer": true, "requires": { @@ -9535,7 +11381,9 @@ } }, "fill-range": { - "version": "7.0.1", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "peer": true, "requires": { @@ -9543,38 +11391,53 @@ } }, "find-up": { - "version": "2.1.0", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "peer": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "flat-cache": { - "version": "3.0.4", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "peer": true, "requires": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "flatted": { - "version": "3.2.5", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true, "peer": true }, "for-each": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "requires": { "is-callable": "^1.1.3" } }, "form-serialize": { - "version": "0.7.2" + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/form-serialize/-/form-serialize-0.7.2.tgz", + "integrity": "sha512-ohEA4Crzd/+hSREjGf4kSsy73WhAtQ7H+blGEz2DVd+JCi0TV5nZBSn9PaPlvrl9m29fa6xclAfpRkqZ57b1bw==" }, "form-storage": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/form-storage/-/form-storage-1.3.5.tgz", + "integrity": "sha512-Pp9OE43Yy8DkBmk12Yf6i5HmWsNwDJ25IiON5JqaOrvfUE2fZQFYkGXbG9lIkum8h+JSURNulc/w6d56W9X3dA==", "requires": { "element-matches-polyfill": "^1.0.0", "form-serialize": "^0.7.2", @@ -9583,7 +11446,9 @@ } }, "formBuilder": { - "version": "3.7.3", + "version": "3.19.12", + "resolved": "https://registry.npmjs.org/formBuilder/-/formBuilder-3.19.12.tgz", + "integrity": "sha512-6oYlgADVLB5HirXW0suciSPEZ/LRx1YmNwFUFV4VN1r+lpEy2h0+nUoAqOaY2KG2r7jr9RuZJpN8A6N+0N4gfA==", "requires": { "jquery": ">=3.4.1", "jquery-ui-sortable": "*" @@ -9591,74 +11456,99 @@ }, "fs.realpath": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "peer": true }, "function-bind": { - "version": "1.1.1", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true }, "function.prototype.name": { - "version": "1.1.5", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" } }, "functional-red-black-tree": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true, "peer": true }, "functions-have-names": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, "gensync": { "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "peer": true }, "get-intrinsic": { - "version": "1.2.0", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "get-stdin": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true, "peer": true }, "get-symbol-description": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" } }, "glob": { - "version": "7.2.0", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "peer": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "peer": true, "requires": { @@ -9667,6 +11557,8 @@ }, "global-modules": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "peer": true, "requires": { @@ -9675,6 +11567,8 @@ }, "global-prefix": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, "peer": true, "requires": { @@ -9685,6 +11579,8 @@ "dependencies": { "which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "peer": true, "requires": { @@ -9694,22 +11590,25 @@ } }, "globals": { - "version": "13.12.1", - "dev": true, - "peer": true, - "requires": { - "type-fest": "^0.20.2" - } + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true }, "globalthis": { - "version": "1.0.3", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "requires": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" } }, "globby": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "peer": true, "requires": { @@ -9722,7 +11621,9 @@ }, "dependencies": { "ignore": { - "version": "5.2.0", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "peer": true } @@ -9730,11 +11631,15 @@ }, "globjoin": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true, "peer": true }, "gonzales-pe": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", "dev": true, "peer": true, "requires": { @@ -9742,11 +11647,15 @@ } }, "google-protobuf": { - "version": "3.21.2", + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.4.tgz", + "integrity": "sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==", "dev": true }, "gopd": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "requires": { "get-intrinsic": "^1.1.3" @@ -9754,64 +11663,107 @@ }, "hard-rejection": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "peer": true }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "has-bigints": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true }, "has-flag": { - "version": "4.0.0", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "has-property-descriptors": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "requires": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" } }, "has-proto": { - "version": "1.0.1", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true }, "has-symbols": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, - "has-tostringtag": { - "version": "1.0.0", + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.3" + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "requires": { - "has-symbols": "^1.0.2" + "function-bind": "^1.1.2" } }, "highlight.js": { - "version": "11.4.0" + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.10.0.tgz", + "integrity": "sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==" }, "hosted-git-info": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "peer": true, "requires": { "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + } } }, "html-tags": { - "version": "3.1.0", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true, "peer": true }, "htmlparser2": { "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, "peer": true, "requires": { @@ -9825,15 +11777,21 @@ }, "ignore": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, "peer": true }, "immutable": { - "version": "4.2.4", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", "dev": true }, "import-fresh": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "peer": true, "requires": { @@ -9843,21 +11801,29 @@ }, "import-lazy": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true, "peer": true }, "imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "peer": true }, "indent-string": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "peer": true }, "inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "peer": true, "requires": { @@ -9866,18 +11832,26 @@ } }, "inherits": { - "version": "2.0.4" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "peer": true }, "inline-attachment": { - "version": "2.0.3" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inline-attachment/-/inline-attachment-2.0.3.tgz", + "integrity": "sha512-xUHGRUAVthQHdrdRTDtBAmelfL/3EuLKze8pC7BqtAlabPs8NaEvp8BtCdTLiqQuDZsBYPhbOzV9+G/FJVet6g==" }, "inscrybmde": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/inscrybmde/-/inscrybmde-1.11.6.tgz", + "integrity": "sha512-SDTiLRHvYKFYJMJNrnyUEOjHffZ90QfqLAH0Vab5zkZJLLX2FHMlGfgwYhPuqIuLYCFRGScqLWiOjv3L5lK3hw==", "requires": { "codemirror": "^5.33.0", "codemirror-spell-checker": "^1.1.2", @@ -9892,21 +11866,27 @@ } }, "internal-slot": { - "version": "1.0.5", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, "is-alphabetical": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true, "peer": true }, "is-alphanumerical": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dev": true, "peer": true, "requires": { @@ -9916,6 +11896,8 @@ }, "is-arguments": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "peer": true, "requires": { @@ -9924,21 +11906,36 @@ } }, "is-array-buffer": { - "version": "3.0.1", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "requires": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" } }, "is-arrayish": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, "peer": true }, + "is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "peer": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-bigint": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "requires": { "has-bigints": "^1.0.1" @@ -9946,6 +11943,8 @@ }, "is-boolean-object": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -9954,22 +11953,39 @@ }, "is-buffer": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true, "peer": true }, "is-callable": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, "is-core-module": { - "version": "2.11.0", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "requires": { + "hasown": "^2.0.2" + } + }, + "is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, "requires": { - "has": "^1.0.3" + "is-typed-array": "^1.1.13" } }, "is-date-object": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -9977,20 +11993,48 @@ }, "is-decimal": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true, "peer": true }, "is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, + "is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "peer": true }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "peer": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -9998,25 +12042,35 @@ }, "is-hexadecimal": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true, "peer": true }, "is-map": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "peer": true }, "is-negative-zero": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true }, "is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "peer": true }, "is-number-object": { - "version": "1.0.6", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -10024,11 +12078,15 @@ }, "is-plain-obj": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "peer": true }, "is-regex": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -10037,23 +12095,31 @@ }, "is-regexp": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", "dev": true, "peer": true }, "is-set": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "peer": true }, "is-shared-array-buffer": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "requires": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" } }, "is-string": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -10061,81 +12127,118 @@ }, "is-symbol": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { "has-symbols": "^1.0.2" } }, "is-typed-array": { - "version": "1.1.10", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.14" } }, "is-typedarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true, "peer": true }, "is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "peer": true }, "is-weakmap": { - "version": "2.0.1", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "peer": true }, "is-weakref": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "requires": { "call-bind": "^1.0.2" } }, "is-weakset": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" } }, "isarray": { "version": "2.0.5", - "dev": true, - "peer": true + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, "peer": true }, + "iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "peer": true, + "requires": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, "jquery": { - "version": "3.6.0" + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, "jquery-ui": { - "version": "1.13.0", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.14.0.tgz", + "integrity": "sha512-mPfYKBoRCf0MzaT2cyW5i3IuZ7PfTITaasO5OFLAQxrHuI+ZxruPa+4/K1OMNT8oElLWGtIxc9aRbyw20BKr8g==", "requires": { - "jquery": ">=1.8.0 <4.0.0" + "jquery": ">=1.12.0 <5.0.0" } }, "jquery-ui-sortable": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jquery-ui-sortable/-/jquery-ui-sortable-1.0.0.tgz", + "integrity": "sha512-7xAUWoEJ/jHoj48ei8CCUtiad2uM3ie3IR2b3KB0Mpmb54IbBxzVb5vtrj0zqtd0GNQDImx+BPZml9QmK2EL3w==" }, "js-tokens": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "peer": true, "requires": { @@ -10145,74 +12248,116 @@ }, "jsesc": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "peer": true + }, "json-parse-even-better-errors": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, "peer": true }, "json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "peer": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "peer": true }, "json5": { - "version": "2.2.0", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "peer": true, - "requires": { - "minimist": "^1.2.5" - } + "peer": true }, "jsrender": { - "version": "v1.0.11", + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/jsrender/-/jsrender-1.0.15.tgz", + "integrity": "sha512-OodS9veJzdkxj0zqWTEDyHm5MdwpeaBA11X3W06n3wTP7XifCv1JwaNpY6jn0KIltzgm3nM1Gi/tccslMEai1w==", "requires": { "through2": "^3.0.1" } }, "jsx-ast-utils": { - "version": "3.3.3", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "peer": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + } + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "peer": true, "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "json-buffer": "3.0.1" } }, "kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "peer": true }, "known-css-properties": { "version": "0.21.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz", + "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", "dev": true, "peer": true }, "language-subtag-registry": { - "version": "0.3.22", + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true, "peer": true }, "language-tags": { - "version": "1.0.5", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "peer": true, "requires": { - "language-subtag-registry": "~0.3.2" + "language-subtag-registry": "^0.3.20" } }, "leaflet.featuregroup.subgroup": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/leaflet.featuregroup.subgroup/-/leaflet.featuregroup.subgroup-1.0.2.tgz", + "integrity": "sha512-9nCVg8nUe686+BtPbUT7ALOe/IA+8Mum+rkA8pfPpCkH0WvKevRrH+JMcMTjAoNQKVI0uxrWrLV5w298SS3ESA==" }, "levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "peer": true, "requires": { @@ -10222,52 +12367,127 @@ }, "lines-and-columns": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true, "peer": true }, "locate-path": { - "version": "2.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "peer": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "lodash": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true, "peer": true }, "lodash.debounce": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, "lodash.merge": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, "peer": true }, "lodash.truncate": { "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true, "peer": true }, "log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "peer": true, "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "longest-streak": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true, "peer": true }, "loose-envify": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "peer": true, "requires": { @@ -10275,15 +12495,18 @@ } }, "lru-cache": { - "version": "6.0.0", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "peer": true, "requires": { - "yallist": "^4.0.0" + "yallist": "^3.0.2" } }, "map-obj": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "peer": true }, @@ -10294,11 +12517,15 @@ }, "mathml-tag-names": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true, "peer": true }, "mdast-util-from-markdown": { "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", "dev": true, "peer": true, "requires": { @@ -10311,6 +12538,8 @@ }, "mdast-util-to-markdown": { "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", "dev": true, "peer": true, "requires": { @@ -10324,11 +12553,15 @@ }, "mdast-util-to-string": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true, "peer": true }, "meow": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, "peer": true, "requires": { @@ -10344,22 +12577,19 @@ "trim-newlines": "^3.0.0", "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" - }, - "dependencies": { - "type-fest": { - "version": "0.18.1", - "dev": true, - "peer": true - } } }, "merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "peer": true }, "micromark": { "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", "dev": true, "peer": true, "requires": { @@ -10368,32 +12598,42 @@ } }, "micromatch": { - "version": "4.0.4", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "peer": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.3", + "picomatch": "^2.3.1" } }, "min-indent": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "peer": true }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.5", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, "minimist-options": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "peer": true, "requires": { @@ -10404,19 +12644,27 @@ }, "ms": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "natural-compare": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "peer": true }, "node-releases": { - "version": "2.0.10", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, "normalize-package-data": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "peer": true, "requires": { @@ -10424,93 +12672,128 @@ "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "peer": true + } } }, "normalize-range": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, "peer": true }, "normalize-selector": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==", "dev": true, "peer": true }, "num2fraction": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", "dev": true, "peer": true }, "object-assign": { - "version": "4.1.1" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { - "version": "1.12.3", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true }, "object-is": { - "version": "1.1.5", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" } }, "object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object.assign": { - "version": "4.1.4", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, "object.entries": { - "version": "1.1.6", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "object.fromentries": { - "version": "2.0.6", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, - "peer": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" } }, - "object.hasown": { - "version": "1.1.2", + "object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, - "peer": true, "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" } }, "object.values": { - "version": "1.1.6", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "peer": true, "requires": { @@ -10518,7 +12801,9 @@ } }, "optionator": { - "version": "0.9.1", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "peer": true, "requires": { @@ -10527,29 +12812,40 @@ "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" } }, "p-limit": { - "version": "1.3.0", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "peer": true, "requires": { - "p-try": "^1.0.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "2.0.0", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "peer": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "^2.2.0" } }, "p-try": { - "version": "1.0.0", - "dev": true + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "peer": true }, "parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "peer": true, "requires": { @@ -10558,6 +12854,8 @@ }, "parse-entities": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dev": true, "peer": true, "requires": { @@ -10571,6 +12869,8 @@ }, "parse-json": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "peer": true, "requires": { @@ -10581,40 +12881,62 @@ } }, "path-exists": { - "version": "3.0.0", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "peer": true }, "path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "peer": true }, "path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "peer": true }, "path-parse": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "peer": true }, "picocolors": { - "version": "0.2.1", - "dev": true, - "peer": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true }, "picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "peer": true }, + "possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true + }, "postcss": { "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "peer": true, "requires": { @@ -10622,8 +12944,10 @@ "source-map": "^0.6.1" }, "dependencies": { - "source-map": { - "version": "0.6.1", + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true, "peer": true } @@ -10631,6 +12955,8 @@ }, "postcss-html": { "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", "dev": true, "peer": true, "requires": { @@ -10639,6 +12965,8 @@ }, "postcss-less": { "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", "dev": true, "peer": true, "requires": { @@ -10647,16 +12975,22 @@ }, "postcss-media-query-parser": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", "dev": true, "peer": true }, "postcss-resolve-nested-selector": { - "version": "0.1.1", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.5.tgz", + "integrity": "sha512-tum2m18S22ZSNjXatMG0FSk5ZL83pTttymeJx5Gzxg7RU0s1jNDU9rXltro4osQrukjyNormcb07IEjqEyPNaA==", "dev": true, "peer": true }, "postcss-safe-parser": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", "dev": true, "peer": true, "requires": { @@ -10665,6 +12999,8 @@ }, "postcss-sass": { "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", "dev": true, "peer": true, "requires": { @@ -10674,6 +13010,8 @@ }, "postcss-scss": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", "dev": true, "peer": true, "requires": { @@ -10681,7 +13019,9 @@ } }, "postcss-selector-parser": { - "version": "6.0.9", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", "dev": true, "peer": true, "requires": { @@ -10691,27 +13031,37 @@ }, "postcss-syntax": { "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", "dev": true, "peer": true, "requires": {} }, "postcss-value-parser": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true, "peer": true }, "prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "peer": true }, "progress": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, "peer": true }, "prop-types": { "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "peer": true, "requires": { @@ -10721,12 +13071,16 @@ } }, "punycode": { - "version": "2.1.1", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "peer": true }, "query-string": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "requires": { "decode-uri-component": "^0.2.0", "object-assign": "^4.1.0", @@ -10735,33 +13089,45 @@ }, "query-string-es5": { "version": "6.1.4", + "resolved": "https://registry.npmjs.org/query-string-es5/-/query-string-es5-6.1.4.tgz", + "integrity": "sha512-pMdQETPqMQO+OUd2t3hUxBV8REa6w+iyD+o87M1qc1Vj3jBkQIIw3aZc+6rxlRTDxZ5ac+w0rGE/p4JIt2Xupg==", "requires": { "decode-uri-component": "^0.2.0", "strict-uri-encode": "^2.0.0" }, "dependencies": { "strict-uri-encode": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==" } } }, "queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "peer": true }, "quick-lru": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, "peer": true }, "react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true, "peer": true }, "read-pkg": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "peer": true, "requires": { @@ -10773,94 +13139,65 @@ "dependencies": { "hosted-git-info": { "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "peer": true }, "normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "peer": true, "requires": { "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "5.7.1", - "dev": true, - "peer": true - }, - "type-fest": { - "version": "0.6.0", - "dev": true, - "peer": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "dev": true, - "peer": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "dev": true, - "peer": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "peer": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "peer": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "peer": true, - "requires": { - "p-limit": "^2.2.0" + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "p-try": { - "version": "2.2.0", + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "peer": true }, - "path-exists": { - "version": "4.0.0", + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "peer": true - }, + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "peer": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { "type-fest": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "peer": true } } }, "readable-stream": { - "version": "3.6.0", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -10869,6 +13206,8 @@ }, "redent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "peer": true, "requires": { @@ -10876,44 +13215,75 @@ "strip-indent": "^3.0.0" } }, + "reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + } + }, "regenerate": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "regenerate-unicode-properties": { - "version": "10.1.0", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, "requires": { "regenerate": "^1.4.2" } }, "regenerator-runtime": { - "version": "0.13.11", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true }, "regenerator-transform": { - "version": "0.15.1", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, "requires": { "@babel/runtime": "^7.8.4" } }, "regexp.prototype.flags": { - "version": "1.4.3", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" } }, "regexpp": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "peer": true }, "regexpu-core": { - "version": "5.3.1", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, "requires": { "@babel/regjsgen": "^0.8.0", @@ -10926,6 +13296,8 @@ }, "regjsparser": { "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -10933,12 +13305,16 @@ "dependencies": { "jsesc": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true } } }, "remark": { "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", "dev": true, "peer": true, "requires": { @@ -10949,6 +13325,8 @@ }, "remark-parse": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", "dev": true, "peer": true, "requires": { @@ -10957,6 +13335,8 @@ }, "remark-stringify": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", + "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", "dev": true, "peer": true, "requires": { @@ -10965,35 +13345,47 @@ }, "repeat-string": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, "peer": true }, "require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "peer": true }, "resolve": { - "version": "1.22.0", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "peer": true }, "reusify": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "peer": true }, "rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "peer": true, "requires": { @@ -11002,6 +13394,8 @@ }, "run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "peer": true, "requires": { @@ -11009,26 +13403,46 @@ } }, "rxjs": { - "version": "7.8.0", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, "requires": { "tslib": "^2.1.0" } }, + "safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + } + }, "safe-buffer": { - "version": "5.2.1" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safe-regex-test": { - "version": "1.0.0", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" } }, "sass-embedded": { "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.57.1.tgz", + "integrity": "sha512-O0s796x76bRSJIdmJ4lrK+zJLtF3XeP+0tbJzR4NAPSDnWqHLk2boUYSdfx4DnF4x9rGmcVlMWFE8UvnLMNCmw==", "dev": true, "requires": { "buffer-builder": "^0.2.0", @@ -11046,8 +13460,16 @@ "supports-color": "^8.1.1" }, "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -11055,24 +13477,103 @@ } } }, + "sass-embedded-darwin-arm64": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.57.1.tgz", + "integrity": "sha512-YSfrLZkM2HdXETQdSznv2DN2GdkmBNWLAlHfDWe0toSEIB2C2YGuoqHYZtl6PBYqu8k8FH4TDyct8VzoIa+rMw==", + "dev": true, + "optional": true + }, + "sass-embedded-darwin-x64": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.57.1.tgz", + "integrity": "sha512-xq2Au8CRLHQ+MqH2p8gQn9rYGtfQ8voCWMRz7klYmmh5kXHFjefG3opPPB8mJeSc3SIqE35SQxQEIhUbsxozpg==", + "dev": true, + "optional": true + }, + "sass-embedded-linux-arm": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.57.1.tgz", + "integrity": "sha512-s+roBIgiQSg8124JmYmiSw4THWRvkF2BOclBZCb+OFLa8ZTak2WZdGs0PhqkMmZypxQ7cewh9ts+sOWN24yIrw==", + "dev": true, + "optional": true + }, + "sass-embedded-linux-arm64": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.57.1.tgz", + "integrity": "sha512-R0GqVqf0xEhQ5nDbj7vqmKw+/1kqiURNBl0pD4uv4inBed2YKg+7agn7Y5XE5GUWbgOz7ubjL2kt4Glr7K7xeA==", + "dev": true, + "optional": true + }, + "sass-embedded-linux-ia32": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.57.1.tgz", + "integrity": "sha512-gKqMpfcjrW4S1m+cuRn88oUkr/HMv48CqyCHnfGCsrkTpIft33a1ZKW2jWm09rwmR0g/G6yGstoQO0iHWJWxuQ==", + "dev": true, + "optional": true + }, "sass-embedded-linux-x64": { "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.57.1.tgz", + "integrity": "sha512-AI6CrcuLWP22RXhVrZUN2JfdQ7YdFR30dA4twYwp/Q4hUfj85dJrVD5ORi8G04haMWPOQiFV6pBcMgzpiY2Bog==", + "dev": true, + "optional": true + }, + "sass-embedded-win32-ia32": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.57.1.tgz", + "integrity": "sha512-s7EhJLG9AnJNBga3I+W0rk6y/1n/i0XD34rvqR3yJgBhNKkI5rVCxFN7FAcGR50vQQbCO1MrUCmuVvld+2qvyQ==", + "dev": true, + "optional": true + }, + "sass-embedded-win32-x64": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.57.1.tgz", + "integrity": "sha512-b/Kgz7ADPTlPITk8e47Zf3eiuXlTGhi/eWsAoesUmkjR7jayvFNLHPhThgiRAxkzT6UlWI3Dzr+E3OBqUjegEg==", "dev": true, "optional": true }, "select2": { - "version": "4.1.0-rc.0" + "version": "4.1.0-rc.0", + "resolved": "https://registry.npmjs.org/select2/-/select2-4.1.0-rc.0.tgz", + "integrity": "sha512-Hr9TdhyHCZUtwznEH2CBf7967mEM0idtJ5nMtjvk3Up5tPukOLXbHUNmh10oRfeNIhj+3GD3niu+g6sVK+gK0A==" }, "semver": { - "version": "7.3.5", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, - "peer": true, "requires": { - "lru-cache": "^6.0.0" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" } }, "shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "peer": true, "requires": { @@ -11081,40 +13582,89 @@ }, "shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "peer": true }, "side-channel": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" } }, "signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "peer": true }, "slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "peer": true }, "slice-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "peer": true, "requires": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + } } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true + }, "spdx-correct": { - "version": "3.1.1", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "peer": true, "requires": { @@ -11123,12 +13673,16 @@ } }, "spdx-exceptions": { - "version": "2.3.0", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, "peer": true }, "spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "peer": true, "requires": { @@ -11137,22 +13691,30 @@ } }, "spdx-license-ids": { - "version": "3.0.11", + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", "dev": true, "peer": true }, "specificity": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", "dev": true, "peer": true }, "sprintf-js": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "peer": true }, "stop-iteration-iterator": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", "dev": true, "peer": true, "requires": { @@ -11160,59 +13722,120 @@ } }, "strict-uri-encode": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==" }, "string_decoder": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { "safe-buffer": "~5.2.0" } }, "string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "peer": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "peer": true + } + } + }, + "string.prototype.includes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz", + "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==", + "dev": true, + "peer": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "string.prototype.matchall": { - "version": "4.0.8", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + } + }, + "string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "peer": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" } }, "string.prototype.trimend": { - "version": "1.0.6", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "string.prototype.trimstart": { - "version": "1.0.6", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "peer": true, "requires": { @@ -11221,10 +13844,14 @@ }, "strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true }, "strip-indent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "peer": true, "requires": { @@ -11233,16 +13860,22 @@ }, "strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "peer": true }, "style-search": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", "dev": true, "peer": true }, "stylelint": { "version": "13.11.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.11.0.tgz", + "integrity": "sha512-DhrKSWDWGZkCiQMtU+VroXM6LWJVC8hSK24nrUngTSQvXGK75yZUq4yNpynqrxD3a/fzKMED09V+XxO4z4lTbw==", "dev": true, "peer": true, "requires": { @@ -11296,20 +13929,81 @@ "write-file-atomic": "^3.0.3" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, "ignore": { - "version": "5.2.0", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "peer": true }, "resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, "sugarss": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", "dev": true, "peer": true, "requires": { @@ -11317,24 +14011,31 @@ } }, "supports-color": { - "version": "7.2.0", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "peer": true, "requires": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" } }, "supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, "svg-tags": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true, "peer": true }, "table": { - "version": "6.8.0", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, "peer": true, "requires": { @@ -11346,18 +14047,22 @@ }, "dependencies": { "ajv": { - "version": "8.10.0", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "peer": true, "requires": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" } }, "json-schema-traverse": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, "peer": true } @@ -11365,11 +14070,15 @@ }, "text-table": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true, "peer": true }, "through2": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", "requires": { "inherits": "^2.0.4", "readable-stream": "2 || 3" @@ -11377,10 +14086,14 @@ }, "to-fast-properties": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true }, "to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "peer": true, "requires": { @@ -11389,26 +14102,34 @@ }, "trim-newlines": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, "peer": true }, "trough": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "dev": true, "peer": true }, "tsconfig-paths": { - "version": "3.12.0", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "requires": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", + "json5": "^1.0.2", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" }, "dependencies": { "json5": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -11417,11 +14138,15 @@ } }, "tslib": { - "version": "2.5.0", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "peer": true, "requires": { @@ -11429,21 +14154,68 @@ } }, "type-fest": { - "version": "0.20.2", + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "peer": true }, + "typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + } + }, + "typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + } + }, + "typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + } + }, "typed-array-length": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "requires": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" } }, "typedarray-to-buffer": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "peer": true, "requires": { @@ -11451,10 +14223,14 @@ } }, "typo-js": { - "version": "1.2.1" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/typo-js/-/typo-js-1.2.4.tgz", + "integrity": "sha512-Oy/k+tFle5NAA3J/yrrYGfvEnPVrDZ8s8/WCwjUE75k331QyKIsFss7byQ/PzBmXLY6h1moRnZbnaxWBe3I3CA==" }, "unbox-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -11465,10 +14241,14 @@ }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true }, "unicode-match-property-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { "unicode-canonical-property-names-ecmascript": "^2.0.0", @@ -11477,14 +14257,20 @@ }, "unicode-match-property-value-ecmascript": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true }, "unicode-property-aliases-ecmascript": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true }, "unified": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "dev": true, "peer": true, "requires": { @@ -11498,6 +14284,8 @@ "dependencies": { "is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "peer": true } @@ -11505,6 +14293,8 @@ }, "unist-util-find-all-after": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", + "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", "dev": true, "peer": true, "requires": { @@ -11513,11 +14303,15 @@ }, "unist-util-is": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", "dev": true, "peer": true }, "unist-util-stringify-position": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, "peer": true, "requires": { @@ -11525,21 +14319,19 @@ } }, "update-browserslist-db": { - "version": "1.0.10", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "dependencies": { - "picocolors": { - "version": "1.0.0", - "dev": true - } + "escalade": "^3.1.2", + "picocolors": "^1.0.1" } }, "uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "peer": true, "requires": { @@ -11547,15 +14339,21 @@ } }, "util-deprecate": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "v8-compile-cache": { - "version": "2.3.0", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", "dev": true, "peer": true }, "validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "peer": true, "requires": { @@ -11565,6 +14363,8 @@ }, "vfile": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dev": true, "peer": true, "requires": { @@ -11576,6 +14376,8 @@ }, "vfile-message": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dev": true, "peer": true, "requires": { @@ -11585,6 +14387,8 @@ }, "which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "peer": true, "requires": { @@ -11593,6 +14397,8 @@ }, "which-boxed-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { "is-bigint": "^1.0.1", @@ -11602,41 +14408,71 @@ "is-symbol": "^1.0.3" } }, + "which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dev": true, + "peer": true, + "requires": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + } + }, "which-collection": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "peer": true, "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" } }, "which-typed-array": { - "version": "1.1.9", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.2" } }, "word-wrap": { - "version": "1.2.3", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "peer": true }, "wrappy": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true, "peer": true }, "write-file-atomic": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "peer": true, "requires": { @@ -11647,22 +14483,29 @@ } }, "yallist": { - "version": "4.0.0", - "dev": true, - "peer": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "yaml": { "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, "peer": true }, "yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "peer": true }, "zwitch": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "dev": true, "peer": true } diff --git a/package.json b/package.json index 7214e7f4d..b6be76569 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "keywords": [ "decidim" ], - "author": "ivan@platoniq.net", + "author": "ivan@pokecode.net", "license": "AGPL-3.0-or-later", "bugs": { "url": "https://github.com/decidim-ice/decidim-module-decidim_awesome/issues" @@ -57,7 +57,7 @@ "codemirror": "^5.65.0", "europa": "^4.0.0", "form-storage": "^1.3.5", - "formBuilder": "^3.6.1", + "formBuilder": "^3.19.12", "highlight.js": "^11.4.0", "inline-attachment": "^2.0.3", "inscrybmde": "^1.11.6", diff --git a/spec/cells/content_blocks/map_cell_spec.rb b/spec/cells/content_blocks/map_cell_spec.rb index fb3d8d1a0..c11c5b113 100644 --- a/spec/cells/content_blocks/map_cell_spec.rb +++ b/spec/cells/content_blocks/map_cell_spec.rb @@ -7,14 +7,14 @@ module Decidim::DecidimAwesome subject { cell(content_block.cell, content_block).call } let(:organization) { create(:organization) } - let(:content_block) { create :content_block, organization: organization, manifest_name: :awesome_map, scope_name: :homepage, settings: settings } + let(:content_block) { create(:content_block, organization: organization, manifest_name: :awesome_map, scope_name: :homepage, settings: settings) } let(:settings) { {} } - let!(:participatory_process) { create :participatory_process, organization: organization } - let!(:category) { create :category, participatory_space: participatory_process } - let!(:proposal_component) { create :proposal_component, :with_geocoding_enabled, participatory_space: participatory_process } - let!(:meeting_component) { create :meeting_component, participatory_space: participatory_process } - let!(:proposal) { create :proposal, component: proposal_component } - let!(:meeting) { create :meeting, component: meeting_component } + let!(:participatory_process) { create(:participatory_process, organization: organization) } + let!(:category) { create(:category, participatory_space: participatory_process) } + let!(:proposal_component) { create(:proposal_component, :with_geocoding_enabled, participatory_space: participatory_process) } + let!(:meeting_component) { create(:meeting_component, participatory_space: participatory_process) } + let!(:proposal) { create(:proposal, component: proposal_component) } + let!(:meeting) { create(:meeting, component: meeting_component) } controller Decidim::PagesController @@ -23,12 +23,12 @@ module Decidim::DecidimAwesome end it "shows the map" do - expect(subject).to have_selector("#awesome-map") + expect(subject).to have_css("#awesome-map") expect(subject).to have_content("window.AwesomeMap.categories") end it "do not show the title" do - expect(subject).not_to have_selector("h3.section-heading") + expect(subject).not_to have_css("h3.section-heading") end it "uses default height" do @@ -69,7 +69,7 @@ module Decidim::DecidimAwesome end it "shows the title" do - expect(subject).to have_selector("h3.section-heading") + expect(subject).to have_css("h3.section-heading") expect(subject).to have_content("Look this beautiful map!") end end @@ -121,9 +121,9 @@ module Decidim::DecidimAwesome subject { cell(another_content_block.cell, another_content_block).call } let(:another_organization) { create(:organization) } - let(:another_content_block) { create :content_block, organization: another_organization, manifest_name: :awesome_map, scope_name: :homepage, settings: settings } - let(:another_participatory_process) { create :participatory_process, organization: another_organization } - let!(:another_meeting_component) { create :meeting_component, participatory_space: another_participatory_process } + let(:another_content_block) { create(:content_block, organization: another_organization, manifest_name: :awesome_map, scope_name: :homepage, settings: settings) } + let(:another_participatory_process) { create(:participatory_process, organization: another_organization) } + let!(:another_meeting_component) { create(:meeting_component, participatory_space: another_participatory_process) } before do allow(controller).to receive(:current_organization).and_return(another_organization) diff --git a/spec/commands/admin/create_proposal_custom_field_spec.rb b/spec/commands/admin/create_proposal_custom_field_spec.rb index 2f034fa95..62b467db0 100644 --- a/spec/commands/admin/create_proposal_custom_field_spec.rb +++ b/spec/commands/admin/create_proposal_custom_field_spec.rb @@ -14,16 +14,16 @@ module Admin current_organization: organization } end - let(:params) do + let(:another_params) do { allow_images_in_full_editor: true, allow_images_in_small_editor: true } end - let(:form) do - ConfigForm.from_params(params).with_context(context) + let(:another_form) do + ConfigForm.from_params(another_params).with_context(context) end - let(:another_config) { UpdateConfig.new(form) } + let(:another_config) { UpdateConfig.new(another_form) } describe "when valid" do it "broadcasts :ok and creates a Hash" do diff --git a/spec/commands/admin/create_proposal_spec.rb b/spec/commands/admin/create_proposal_spec.rb new file mode 100644 index 000000000..76c835a90 --- /dev/null +++ b/spec/commands/admin/create_proposal_spec.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +require "spec_helper" + +module Decidim::Proposals + module Admin + describe CreateProposal do + subject { described_class.new(form) } + + let(:organization) { create(:organization) } + let(:user) { create(:user, :admin, organization:) } + let(:participatory_process) { create(:participatory_process, :with_steps, organization:) } + let(:component) { create(:proposal_component, :with_creation_enabled, participatory_space: participatory_process) } + let(:context) do + { + current_user: user, + current_organization: organization, + current_component: component + } + end + let(:params) do + { + title:, + body:, + private_body: + } + end + let(:title) do + { "en" => "A valid proposal title" } + end + let(:body) do + { "en" => "A valid proposal body" } + end + let(:private_body) { "A valid private proposal body" } + let(:form) do + Decidim::Proposals::Admin::ProposalForm.from_params(params).with_context(context) + end + let(:proposal) { Decidim::Proposals::Proposal.last } + + it "broadcasts :ok and creates a private_body" do + expect { subject.call }.to broadcast(:ok) + expect(proposal.title).to eq(title) + expect(proposal.body).to eq(body) + expect(proposal.component).to eq(component) + expect(proposal.private_body).to eq(private_body) + expect(proposal.extra_fields.private_body).to eq(private_body) + end + + context "when no private_body" do + let(:private_body) { nil } + + it "broadcasts :ok and does not create extra_fields" do + expect { subject.call }.to broadcast(:ok) + expect(proposal.title).to eq(title) + expect(proposal.body).to eq(body) + expect(proposal.component).to eq(component) + expect(proposal.private_body).to be_nil + expect(proposal.extra_fields).to be_nil + end + end + end + end +end diff --git a/spec/commands/admin/destroy_constraint_spec.rb b/spec/commands/admin/destroy_constraint_spec.rb index 28bead4cc..90e1f134f 100644 --- a/spec/commands/admin/destroy_constraint_spec.rb +++ b/spec/commands/admin/destroy_constraint_spec.rb @@ -47,6 +47,12 @@ module Admin it_behaves_like "destroys the constraint" end + + context "and is another critical scope" do + let(:name) { :proposal_private_custom_field } + + it_behaves_like "destroys the constraint" + end end context "when is the last constraint" do @@ -59,6 +65,12 @@ module Admin it_behaves_like "do not destroy the constraint" end + + context "and is another critical scope" do + let(:name) { :proposal_private_custom_field } + + it_behaves_like "do not destroy the constraint" + end end end end diff --git a/spec/commands/admin/update_proposal_spec.rb b/spec/commands/admin/update_proposal_spec.rb new file mode 100644 index 000000000..9511dbb10 --- /dev/null +++ b/spec/commands/admin/update_proposal_spec.rb @@ -0,0 +1,61 @@ +# frozen_string_literal: true + +require "spec_helper" + +module Decidim::Proposals + module Admin + describe UpdateProposal do + subject { described_class.new(form, proposal) } + + let(:organization) { create(:organization) } + let(:user) { create(:user, :admin, organization:) } + let(:participatory_process) { create(:participatory_process, :with_steps, organization:) } + let(:component) { create(:proposal_component, :with_creation_enabled, participatory_space: participatory_process) } + let(:context) do + { + current_user: user, + current_organization: organization, + current_component: component + } + end + let(:params) do + { + title:, + body:, + private_body: + } + end + let(:title) do + { "en" => "A valid proposal title" } + end + let(:body) do + { "en" => "A valid proposal body" } + end + let(:private_body) { "A valid private proposal body" } + let(:form) do + Decidim::Proposals::Admin::ProposalForm.from_params(params).with_context(context) + end + let(:proposal) { create(:proposal, users: [user], component:) } + + it "broadcasts ok and updates the proposal" do + expect { subject.call }.to broadcast(:ok) + expect(proposal.title["en"]).to eq(title["en"]) + expect(proposal.body["en"]).to eq(body["en"]) + expect(proposal.private_body).to eq(private_body) + end + + context "when no private_body" do + let(:private_body) { nil } + + it "broadcasts :ok and does not create extra_fields" do + expect { subject.call }.to broadcast(:ok) + expect(proposal.title["en"]).to eq(title["en"]) + expect(proposal.body["en"]).to eq(body["en"]) + expect(proposal.component).to eq(component) + expect(proposal.private_body).to be_nil + expect(proposal.extra_fields).to be_nil + end + end + end + end +end diff --git a/spec/commands/create_proposal_spec.rb b/spec/commands/create_proposal_spec.rb new file mode 100644 index 000000000..3b4ea49d0 --- /dev/null +++ b/spec/commands/create_proposal_spec.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +require "spec_helper" + +module Decidim::Proposals + describe CreateProposal do + subject { described_class.new(form, user) } + + let(:organization) { create(:organization) } + let(:user) { create(:user, organization:) } + let(:participatory_process) { create(:participatory_process, :with_steps, organization:) } + let(:component) { create(:proposal_component, :with_creation_enabled, participatory_space: participatory_process) } + let(:context) do + { + current_user: user, + current_organization: organization, + current_component: component + } + end + let(:params) do + { + title:, + body:, + private_body: + } + end + let(:title) { "A valid proposal title" } + let(:body) { "A valid proposal body" } + let(:private_body) { "A valid private proposal body" } + let(:form) do + Decidim::Proposals::ProposalWizardCreateStepForm.from_params(params).with_context(context) + end + let(:proposal) { Decidim::Proposals::Proposal.last } + + it "broadcasts :ok and creates a private_body" do + expect { subject.call }.to broadcast(:ok) + expect(proposal.title["en"]).to eq(title) + expect(proposal.body["en"]).to eq(body) + expect(proposal.component).to eq(component) + expect(proposal.private_body).to eq(private_body) + expect(proposal.extra_fields.private_body).to eq(private_body) + end + + context "when no private_body" do + let(:private_body) { nil } + + it "broadcasts :ok and does not create extra_fields" do + expect { subject.call }.to broadcast(:ok) + expect(proposal.title["en"]).to eq(title) + expect(proposal.body["en"]).to eq(body) + expect(proposal.component).to eq(component) + expect(proposal.private_body).to be_nil + expect(proposal.extra_fields).to be_nil + end + end + end +end diff --git a/spec/commands/update_proposal_spec.rb b/spec/commands/update_proposal_spec.rb new file mode 100644 index 000000000..28f220433 --- /dev/null +++ b/spec/commands/update_proposal_spec.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +require "spec_helper" + +module Decidim::Proposals + describe UpdateProposal do + subject { described_class.new(form, user, proposal) } + + let(:organization) { create(:organization) } + let(:user) { create(:user, organization:) } + let(:participatory_process) { create(:participatory_process, :with_steps, organization:) } + let(:component) { create(:proposal_component, :with_creation_enabled, participatory_space: participatory_process) } + let(:context) do + { + current_user: user, + current_organization: organization, + current_component: component + } + end + let(:params) do + { + title:, + body:, + private_body: + } + end + let(:title) { "A valid proposal title" } + let(:body) { "A valid proposal body" } + let(:private_body) { "A valid private proposal body" } + let(:form) do + Decidim::Proposals::ProposalForm.from_params(params).with_context(context) + end + let(:proposal) { create(:proposal, users: [user], component:) } + + it "broadcasts ok and updates the proposal" do + expect { subject.call }.to broadcast(:ok) + expect(proposal.title["en"]).to eq(title) + expect(proposal.body["en"]).to eq(body) + expect(proposal.private_body).to eq(private_body) + expect(proposal.extra_fields.private_body).to eq(private_body) + end + + context "when no private_body" do + let(:private_body) { nil } + + it "broadcasts :ok and does not create extra_fields" do + expect { subject.call }.to broadcast(:ok) + expect(proposal.title["en"]).to eq(title) + expect(proposal.body["en"]).to eq(body) + expect(proposal.component).to eq(component) + expect(proposal.private_body).to be_nil + expect(proposal.extra_fields).to be_nil + end + end + end +end diff --git a/spec/controllers/admin/config_controller_spec.rb b/spec/controllers/admin/config_controller_spec.rb index 1dc0f70cc..2b5fde5c4 100644 --- a/spec/controllers/admin/config_controller_spec.rb +++ b/spec/controllers/admin/config_controller_spec.rb @@ -34,7 +34,7 @@ module Admin expect(response).to have_http_status(:success) end - it_behaves_like "forbids disabled feature" do + it_behaves_like "forbids disabled feature with redirect" do let(:features) { Decidim::DecidimAwesome.config.keys } let(:action) { get :show, params: params } end @@ -142,7 +142,7 @@ module Admin expect(response).to have_http_status(:redirect) end - it_behaves_like "forbids disabled feature" do + it_behaves_like "forbids disabled feature with redirect" do let(:features) { config.keys } let(:action) { get :show, params: params } end diff --git a/spec/controllers/admin/constraints_controller_spec.rb b/spec/controllers/admin/constraints_controller_spec.rb index 8781df381..9b6928365 100644 --- a/spec/controllers/admin/constraints_controller_spec.rb +++ b/spec/controllers/admin/constraints_controller_spec.rb @@ -44,7 +44,7 @@ module Admin expect(response).to have_http_status(:success) end - it_behaves_like "forbids disabled feature" do + it_behaves_like "forbids disabled feature without redirect" do let(:feature) { key } let(:action) { get :new, params: params } end @@ -99,7 +99,7 @@ module Admin expect(response).to have_http_status(:success) end - it_behaves_like "forbids disabled feature" do + it_behaves_like "forbids disabled feature without redirect" do let(:feature) { key } let(:action) { post :create, params: params } end @@ -124,7 +124,7 @@ module Admin expect(response).to have_http_status(:success) end - it_behaves_like "forbids disabled feature" do + it_behaves_like "forbids disabled feature without redirect" do let(:feature) { key } let(:action) { get :show, params: params } end @@ -138,7 +138,7 @@ module Admin expect(response).to have_http_status(:success) end - it_behaves_like "forbids disabled feature" do + it_behaves_like "forbids disabled feature without redirect" do let(:feature) { key } let(:action) { patch :update, params: params } end @@ -161,7 +161,7 @@ module Admin expect(response).to have_http_status(:success) end - it_behaves_like "forbids disabled feature" do + it_behaves_like "forbids disabled feature without redirect" do let(:feature) { key } let(:action) { delete :destroy, params: params } end diff --git a/spec/controllers/admin/custom_redirects_controller_spec.rb b/spec/controllers/admin/custom_redirects_controller_spec.rb index 87b776078..2c939e984 100644 --- a/spec/controllers/admin/custom_redirects_controller_spec.rb +++ b/spec/controllers/admin/custom_redirects_controller_spec.rb @@ -25,7 +25,7 @@ module Admin expect(response).to have_http_status(:success) end - it_behaves_like "forbids disabled feature" do + it_behaves_like "forbids disabled feature with redirect" do let(:action) { get :new } end end @@ -39,7 +39,7 @@ module Admin expect(response).to have_http_status(:redirect) end - it_behaves_like "forbids disabled feature" + it_behaves_like "forbids disabled feature with redirect" it "creates the new redirection entry" do action @@ -104,7 +104,7 @@ module Admin expect(response).to have_http_status(:success) end - it_behaves_like "forbids disabled feature" + it_behaves_like "forbids disabled feature with redirect" context "when editing a non existing redirection" do let(:params) do @@ -131,7 +131,7 @@ module Admin } end - it_behaves_like "forbids disabled feature" + it_behaves_like "forbids disabled feature with redirect" it "returns http success" do action @@ -193,7 +193,7 @@ module Admin expect(response).to have_http_status(:redirect) end - it_behaves_like "forbids disabled feature" + it_behaves_like "forbids disabled feature with redirect" it "destroy the task" do action diff --git a/spec/controllers/admin/menu_hacks_controller_spec.rb b/spec/controllers/admin/menu_hacks_controller_spec.rb index 08bad0739..903a6f2e8 100644 --- a/spec/controllers/admin/menu_hacks_controller_spec.rb +++ b/spec/controllers/admin/menu_hacks_controller_spec.rb @@ -6,7 +6,7 @@ module Decidim::DecidimAwesome module Admin - describe MenuHacksController, type: :controller do + describe MenuHacksController do include Decidim::TranslationsHelper routes { Decidim::DecidimAwesome::AdminEngine.routes } @@ -15,235 +15,260 @@ module Admin let(:user) { create(:user, :confirmed, :admin, organization: organization) } let(:organization) { create(:organization) } - before do - Decidim::MenuRegistry.register :menu do |menu| - menu.add_item :native_menu, - "Native", - "/processes?locale=ca", - position: 1 - end - request.env["decidim.current_organization"] = user.organization - sign_in user, scope: :user - end - - after do - Decidim::MenuRegistry.find(:menu).configurations.pop - end - - describe "GET #new" do - it "returns http success" do - get :new - expect(response).to have_http_status(:success) - end - - it_behaves_like "forbids disabled feature" do - let(:action) { get :new } + shared_examples "menu hacks controller" do + before do + Decidim::MenuRegistry.register menu_id do |menu| + menu.add_item :native_menu, + "Native", + "/processes?locale=ca", + position: 1 + end + request.env["decidim.current_organization"] = user.organization + sign_in user, scope: :user end - end - describe "POST #create" do - let(:action) { post :create, params: params } - - it "returns http success" do - action - expect(flash[:notice]).not_to be_empty - expect(response).to have_http_status(:redirect) + after do + Decidim::MenuRegistry.find(:menu).configurations.pop end - it_behaves_like "forbids disabled feature" + describe "GET #new" do + let(:params) do + { + menu_id: menu_id + } + end - it "creates the new menu entry" do - action + it "returns http success" do + get(:new, params: params) + expect(response).to have_http_status(:success) + end - items = AwesomeConfig.find_by(organization: organization, var: menu_name).value - expect(items).to be_a(Array) - expect(items.count).to eq(1) - expect(items.first).to eq(attributes) + it_behaves_like "forbids disabled feature with redirect" do + let(:action) { get :new, params: params } + end end - context "when invalid parameters" do - let(:label) { { en: "" } } + describe "POST #create" do + let(:action) { post :create, params: params } - it "returns error" do + it "returns http success" do action - expect(flash[:alert]).not_to be_empty - expect(response).to have_http_status(:ok) + expect(flash[:notice]).not_to be_empty + expect(response).to have_http_status(:redirect) end - it "do not create the new menu entry" do + it_behaves_like "forbids disabled feature with redirect" + + it "creates the new menu entry" do action - expect(AwesomeConfig.find_by(organization: organization, var: menu_name)).not_to be_present + items = AwesomeConfig.find_by(organization: organization, var: menu_name).value + expect(items).to be_a(Array) + expect(items.count).to eq(1) + expect(items.first).to eq(attributes) end - end - context "when same url exists" do - let(:previous_menu) do - [{ "url" => "/some-path", "position" => 10 }] - end - let!(:config) { create :awesome_config, organization: organization, var: menu_name, value: previous_menu } - let(:url) { "/some-path?querystring" } + context "when invalid parameters" do + let(:label) { { en: "" } } - it "returns error" do - action - expect(flash[:alert]).not_to be_empty - expect(response).to have_http_status(:ok) - end + it "returns error" do + action + expect(flash[:alert]).not_to be_empty + expect(response).to have_http_status(:ok) + end - it "do not create the new menu entry" do - action + it "do not create the new menu entry" do + action - expect(AwesomeConfig.find_by(organization: organization, var: menu_name).value.count).to eq(1) + expect(AwesomeConfig.find_by(organization: organization, var: menu_name)).not_to be_present + end end - end - end - - describe "GET #edit" do - let(:action) { get :edit, params: params } - let(:previous_menu) do - [{ "url" => url, "position" => 10 }] - end - let!(:config) { create :awesome_config, organization: organization, var: menu_name, value: previous_menu } - let(:params) do - { - id: Digest::MD5.hexdigest(previous_menu.first["url"]) - } - end - it "returns http success" do - action - expect(response).to have_http_status(:success) - end + context "when same url exists" do + let(:previous_menu) do + [{ "url" => "/some-path", "position" => 10 }] + end + let!(:config) { create(:awesome_config, organization: organization, var: menu_name, value: previous_menu) } + let(:url) { "/some-path?querystring" } - it_behaves_like "forbids disabled feature" + it "returns error" do + action + expect(flash[:alert]).not_to be_empty + expect(response).to have_http_status(:ok) + end - context "when editing a non existing menu" do - let(:params) do - { - id: "nonsense" - } - end + it "do not create the new menu entry" do + action - it "returns error" do - expect { action }.to raise_error(ActiveRecord::RecordNotFound) + expect(AwesomeConfig.find_by(organization: organization, var: menu_name).value.count).to eq(1) + end end end - context "when editing a native menu" do - let(:url) { "/processes?locale=ca" } + describe "GET #edit" do + let(:action) { get :edit, params: params } + let(:previous_menu) do + [{ "url" => url, "position" => 10 }] + end + let!(:config) { create(:awesome_config, organization: organization, var: menu_name, value: previous_menu) } let(:params) do { - id: Digest::MD5.hexdigest(url) + menu_id: menu_id, + id: Digest::MD5.hexdigest(previous_menu.first["url"]) } end - it "removes the querystring" do + it "returns http success" do action - - expect(controller.instance_variable_get(:@form).url).to eq("/processes") expect(response).to have_http_status(:success) end - end - end - describe "PATCH #update" do - let(:action) { patch :update, params: params.merge(id) } - let(:previous_menu) do - [{ "url" => url, "position" => 10 }] - end - let!(:config) { create :awesome_config, organization: organization, var: menu_name, value: previous_menu } - let(:id) do - { - id: Digest::MD5.hexdigest(previous_menu.first["url"]) - } - end - - it_behaves_like "forbids disabled feature" + it_behaves_like "forbids disabled feature with redirect" - it "returns http success" do - action - expect(flash[:notice]).not_to be_empty - expect(response).to have_http_status(:redirect) - end + context "when editing a non existing menu" do + let(:params) do + { + menu_id: menu_id, + id: "nonsense" + } + end - it "updates the menu entry" do - action + it "returns error" do + expect { action }.to raise_error(ActiveRecord::RecordNotFound) + end + end - items = AwesomeConfig.find_by(organization: organization, var: menu_name).value - expect(items).to be_a(Array) - expect(items.count).to eq(1) - expect(items.first).to eq(attributes) + context "when editing a native menu" do + let(:url) { "/processes?locale=ca" } + let(:params) do + { + menu_id: menu_id, + id: Digest::MD5.hexdigest(url) + } + end + + it "removes the querystring" do + action + + expect(controller.instance_variable_get(:@form).url).to eq("/processes") + expect(response).to have_http_status(:success) + end + end end - context "when updating a non existing menu" do + describe "PATCH #update" do + let(:action) { patch :update, params: params.merge(id) } let(:previous_menu) do - [{ "url" => "/another-menu", "position" => 10 }] + [{ "url" => url, "position" => 10 }] end - - it "creates a new item" do - action - items = AwesomeConfig.find_by(organization: organization, var: menu_name).value - - expect(items).to be_a(Array) - expect(items.count).to eq(2) + let!(:config) { create(:awesome_config, organization: organization, var: menu_name, value: previous_menu) } + let(:id) do + { + id: Digest::MD5.hexdigest(previous_menu.first["url"]) + } end - end - context "when invalid parameters" do - let(:label) { { en: "" } } + it_behaves_like "forbids disabled feature with redirect" - it "returns error" do + it "returns http success" do action - expect(flash[:alert]).not_to be_empty - expect(response).to have_http_status(:ok) + expect(flash[:notice]).not_to be_empty + expect(response).to have_http_status(:redirect) end - it "do not create the new menu entry" do + it "updates the menu entry" do action - expect(AwesomeConfig.find_by(organization: organization, var: menu_name).value).to eq(previous_menu) + items = AwesomeConfig.find_by(organization: organization, var: menu_name).value + expect(items).to be_a(Array) + expect(items.count).to eq(1) + expect(items.first).to eq(attributes) end - end - end - describe "DELETE #destroys" do - let(:action) { delete :destroy, params: params } - let(:previous_menu) do - [{ "url" => url, "position" => 10 }] - end - let!(:config) { create :awesome_config, organization: organization, var: menu_name, value: previous_menu } - let(:params) do - { - id: Digest::MD5.hexdigest(previous_menu.first["url"]) - } - end + context "when updating a non existing menu" do + let(:previous_menu) do + [{ "url" => "/another-menu", "position" => 10 }] + end - it "returns ok" do - action - expect(flash[:notice]).not_to be_empty - expect(response).to have_http_status(:redirect) - end + it "creates a new item" do + action + items = AwesomeConfig.find_by(organization: organization, var: menu_name).value - it_behaves_like "forbids disabled feature" + expect(items).to be_a(Array) + expect(items.count).to eq(2) + end + end + + context "when invalid parameters" do + let(:label) { { en: "" } } + + it "returns error" do + action + expect(flash[:alert]).not_to be_empty + expect(response).to have_http_status(:ok) + end - it "destroy the task" do - action - expect(AwesomeConfig.find_by(organization: organization, var: menu_name).value).to eq([]) + it "do not create the new menu entry" do + action + + expect(AwesomeConfig.find_by(organization: organization, var: menu_name).value).to eq(previous_menu) + end + end end - context "when invalid parameters" do + describe "DELETE #destroys" do + let(:action) { delete :destroy, params: params } + let(:previous_menu) do + [{ "url" => url, "position" => 10 }] + end + let!(:config) { create(:awesome_config, organization: organization, var: menu_name, value: previous_menu) } let(:params) do { - id: "nonsense" + menu_id: menu_id, + id: Digest::MD5.hexdigest(previous_menu.first["url"]) } end - it "returns error" do - expect { action }.to raise_error(ActiveRecord::RecordNotFound) - expect(AwesomeConfig.find_by(organization: organization, var: menu_name).value).to eq(previous_menu) + it "returns ok" do + action + expect(flash[:notice]).not_to be_empty + expect(response).to have_http_status(:redirect) + end + + it_behaves_like "forbids disabled feature with redirect" + + it "destroy the task" do + action + expect(AwesomeConfig.find_by(organization: organization, var: menu_name).value).to eq([]) + end + + context "when invalid parameters" do + let(:params) do + { + menu_id: menu_id, + id: "nonsense" + } + end + + it "returns error" do + expect { action }.to raise_error(ActiveRecord::RecordNotFound) + expect(AwesomeConfig.find_by(organization: organization, var: menu_name).value).to eq(previous_menu) + end end end end + + context "with main menu" do + let!(:menu_name) { "menu" } + + it_behaves_like "menu hacks controller" + end + + context "with home content block menu" do + let!(:menu_name) { "home_content_block_menu" } + + it_behaves_like "menu hacks controller" + end end end end diff --git a/spec/forms/admin/config_form_spec.rb b/spec/forms/admin/config_form_spec.rb index 06aea9a42..72f13103f 100644 --- a/spec/forms/admin/config_form_spec.rb +++ b/spec/forms/admin/config_form_spec.rb @@ -26,6 +26,11 @@ module Admin foo: valid_fields } end + let(:private_custom_fields) do + { + foo: valid_fields + } + end let(:valid_fields) { '[{"foo":"bar"}]' } let(:invalid_fields) { '[{"foo":"bar"}]{"baz":"zet"}' } @@ -91,6 +96,27 @@ module Admin end end + describe "proposal private custom fields" do + let(:attributes) do + { + proposal_custom_fields: custom_fields, + proposal_private_custom_fields: private_custom_fields + } + end + + it { is_expected.to be_valid } + + context "and invalid JSON" do + let(:private_custom_fields) do + { + foo: invalid_fields + } + end + + it { is_expected.not_to be_valid } + end + end + describe "validators" do let(:attributes) do { diff --git a/spec/forms/proposal_wizard_create_step_form_spec.rb b/spec/forms/proposal_wizard_create_step_form_spec.rb index ca8e29b87..f7e958e7e 100644 --- a/spec/forms/proposal_wizard_create_step_form_spec.rb +++ b/spec/forms/proposal_wizard_create_step_form_spec.rb @@ -10,7 +10,8 @@ module Decidim::Proposals { title: title, body: body, - body_template: body_template + private_body: private_body, + body_template: body_template, } end @@ -19,6 +20,7 @@ module Decidim::Proposals let(:component) { create(:proposal_component, participatory_space: participatory_space) } let(:title) { "More sidewalks and less roads" } let(:body) { nil } + let(:private_body) { nil } let(:body_template) { nil } let(:author) { create(:user, organization: organization) } @@ -31,14 +33,23 @@ module Decidim::Proposals end let(:data) { '{"type":"text","label":"Full Name","subtype":"text","className":"form-control","name":"text-1476748004559"}' } + let(:private_data) { '{"type":"text","label":"Email","subtype":"text","className":"form-control","name":"text-1476748004569"}' } let(:custom_fields) do { "foo" => "[#{data}]" } end - let!(:config) { create :awesome_config, organization: organization, var: :proposal_custom_fields, value: custom_fields } - let(:config_helper) { create :awesome_config, organization: organization, var: :proposal_custom_field_foo } + let(:private_custom_fields) do + { + "bar" => "[#{private_data}]" + } + end + let!(:config) { create(:awesome_config, organization: organization, var: :proposal_custom_fields, value: custom_fields) } + let!(:private_config) { create(:awesome_config, organization: organization, var: :proposal_private_custom_fields, value: private_custom_fields) } + let(:config_helper) { create(:awesome_config, organization: organization, var: :proposal_custom_field_foo, value: nil) } + let(:private_config_helper) { create(:awesome_config, organization: organization, var: :proposal_private_custom_field_bar, value: nil) } let!(:constraint) { create(:config_constraint, awesome_config: config_helper, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => slug }) } + let!(:private_constraint) { create(:config_constraint, awesome_config: private_config_helper, settings: { "participatory_space_manifest" => "participatory_processes" }) } let(:slug) { participatory_space.slug } context "when is scoped under custom fields" do @@ -48,14 +59,18 @@ module Decidim::Proposals context "when not scoped under custom fields" do let(:slug) { "another-slug" } + it "does not return custom fields" do + expect(form.custom_fields).to be_empty + end + context "and body is not present" do - it { is_expected.to be_invalid } + it { is_expected.not_to be_valid } end context "and body is invalid" do let(:body) { "aa" } - it { is_expected.to be_invalid } + it { is_expected.not_to be_valid } end end @@ -75,12 +90,12 @@ module Decidim::Proposals context "when not scoped under custom fields" do let(:slug) { "another-slug" } - it { is_expected.to be_invalid } + it { is_expected.not_to be_valid } context "when the template and the body are the same" do let(:body) { body_template } - it { is_expected.to be_invalid } + it { is_expected.not_to be_valid } end end end @@ -88,7 +103,7 @@ module Decidim::Proposals context "when is a participatory text" do let(:component) { create(:proposal_component, :with_participatory_texts_enabled, participatory_space: participatory_space) } - it { is_expected.to be_invalid } + it { is_expected.not_to be_valid } end context "when the body exceeds the permited length" do @@ -99,7 +114,7 @@ module Decidim::Proposals context "when not scoped under custom fields" do let(:slug) { "another-slug" } - it { is_expected.to be_invalid } + it { is_expected.not_to be_valid } end context "when is scoped under custom fields" do @@ -108,7 +123,7 @@ module Decidim::Proposals end shared_examples "starts with caps" do |prop| - let!(:config) { create :awesome_config, organization: organization, var: "validate_#{prop}_start_with_caps", value: enabled } + let!(:config) { create(:awesome_config, organization: organization, var: "validate_#{prop}_start_with_caps", value: enabled) } let!(:constraint) { create(:config_constraint, awesome_config: config, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => slug }) } let(:enabled) { false } @@ -119,7 +134,7 @@ module Decidim::Proposals context "when scoped under different context" do let(:slug) { "another-slug" } - it { is_expected.to be_invalid } + it { is_expected.not_to be_valid } context "when starts with caps" do let(prop.to_sym) { "Í start with caps" } @@ -131,7 +146,7 @@ module Decidim::Proposals context "when enabled" do let(:enabled) { true } - it { is_expected.to be_invalid } + it { is_expected.not_to be_valid } context "when starts with caps" do let(prop.to_sym) { "Í start with caps" } @@ -142,7 +157,7 @@ module Decidim::Proposals end shared_examples "minimum length" do |prop| - let!(:config) { create :awesome_config, organization: organization, var: "validate_#{prop}_min_length", value: min_length } + let!(:config) { create(:awesome_config, organization: organization, var: "validate_#{prop}_min_length", value: min_length) } let!(:constraint) { create(:config_constraint, awesome_config: config, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => slug }) } let(:min_length) { 10 } @@ -153,7 +168,7 @@ module Decidim::Proposals context "when scoped under different context" do let(:slug) { "another-slug" } - it { is_expected.to be_invalid } + it { is_expected.not_to be_valid } context "when has more than 15 chars" do let(prop.to_sym) { "I am 17 years old" } @@ -165,7 +180,7 @@ module Decidim::Proposals context "when less than allowed" do let(:min_length) { 11 } - it { is_expected.to be_invalid } + it { is_expected.not_to be_valid } end context "when min_length is zero" do @@ -175,13 +190,13 @@ module Decidim::Proposals if prop == :body it { is_expected.to be_valid } else - it { is_expected.to be_invalid } + it { is_expected.not_to be_valid } end end end shared_examples "max caps percent" do |prop| - let!(:config) { create :awesome_config, organization: organization, var: "validate_#{prop}_max_caps_percent", value: percent } + let!(:config) { create(:awesome_config, organization: organization, var: "validate_#{prop}_max_caps_percent", value: percent) } let!(:constraint) { create(:config_constraint, awesome_config: config, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => slug }) } let(:percent) { 90 } @@ -191,7 +206,7 @@ module Decidim::Proposals shared_examples "invalid percentage" do |per| it "error message returns percentage" do - expect(form).to be_invalid + expect(form).not_to be_valid expect(form.errors.messages.values.flatten.first).to include("over #{per}% of the text") end end @@ -216,7 +231,7 @@ module Decidim::Proposals end shared_examples "max marks together" do |prop| - let!(:config) { create :awesome_config, organization: organization, var: "validate_#{prop}_max_marks_together", value: max_marks } + let!(:config) { create(:awesome_config, organization: organization, var: "validate_#{prop}_max_marks_together", value: max_marks) } let!(:constraint) { create(:config_constraint, awesome_config: config, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => slug }) } let(:max_marks) { 5 } @@ -227,7 +242,7 @@ module Decidim::Proposals context "when scoped under different context" do let(:slug) { "another-slug" } - it { is_expected.to be_invalid } + it { is_expected.not_to be_valid } context "when has only 1 mark" do let(prop.to_sym) { "I am not noisy!" } @@ -238,14 +253,14 @@ module Decidim::Proposals context "when has 2 marks" do let(prop.to_sym) { "I am not noisy!?" } - it { is_expected.to be_invalid } + it { is_expected.not_to be_valid } end end context "when less than allowed" do let(:max_marks) { 4 } - it { is_expected.to be_invalid } + it { is_expected.not_to be_valid } end end diff --git a/spec/lib/system_checker_spec.rb b/spec/lib/system_checker_spec.rb index 956c150e8..8fbe16fad 100644 --- a/spec/lib/system_checker_spec.rb +++ b/spec/lib/system_checker_spec.rb @@ -16,12 +16,12 @@ module Decidim::DecidimAwesome expect(subject.overrides["decidim-admin"].files.length).to eq(1) end - it "has 6 modified files in core" do - expect(subject.overrides["decidim-core"].files.length).to eq(6) + it "has 8 modified files in core" do + expect(subject.overrides["decidim-core"].files.length).to eq(8) end - it "has 12 modified files in proposals" do - expect(subject.overrides["decidim-proposals"].files.length).to eq(12) + it "has 18 modified files in proposals" do + expect(subject.overrides["decidim-proposals"].files.length).to eq(18) end context "when file" do diff --git a/spec/models/proposal_extra_field_spec.rb b/spec/models/proposal_extra_field_spec.rb index 8c2227557..1dc083049 100644 --- a/spec/models/proposal_extra_field_spec.rb +++ b/spec/models/proposal_extra_field_spec.rb @@ -15,13 +15,22 @@ module Decidim::DecidimAwesome expect(extra_fields.proposal).to be_a(Decidim::Proposals::Proposal) end - it "the associated proposal has a weight cache" do - expect(extra_fields.proposal.extra_fields).to eq(extra_fields) + it "cannot associate more than one extra field to a proposal" do + extra_fields + expect do + another_proposal = create(:proposal, component: extra_fields.proposal.component) + create(:awesome_proposal_extra_fields, proposal: another_proposal) + end.to change(Decidim::DecidimAwesome::ProposalExtraField, :count).by(1) + expect { create(:awesome_proposal_extra_fields, proposal: extra_fields.proposal) }.to raise_error(ActiveRecord::RecordInvalid) + end + + it "the associated proposal has the same extra_fields" do + expect(extra_fields.proposal.reload.extra_fields).to eq(extra_fields) end describe "weight_count" do let!(:extra_fields) { create(:awesome_proposal_extra_fields, proposal: proposal) } - let!(:vote_weights) do + let!(:vote_weights) do proposal [ create(:awesome_vote_weight, vote: create(:proposal_vote, proposal: proposal), weight: 1), create(:awesome_vote_weight, vote: create(:proposal_vote, proposal: proposal), weight: 2), @@ -30,7 +39,7 @@ module Decidim::DecidimAwesome end it "returns the weight count for a weight" do - expect(proposal.weight_count(1)).to eq(1) + expect(proposal.reload.weight_count(1)).to eq(1) expect(proposal.weight_count(2)).to eq(1) expect(proposal.weight_count(3)).to eq(1) end @@ -42,7 +51,7 @@ module Decidim::DecidimAwesome end it "returns the weight count for a weight" do - expect(proposal.weight_count(1)).to eq(1) + expect(proposal.reload.weight_count(1)).to eq(1) expect(proposal.weight_count(2)).to eq(1) expect(proposal.weight_count(3)).to eq(2) expect(proposal.weight_count(4)).to eq(0) @@ -55,7 +64,7 @@ module Decidim::DecidimAwesome let(:vote_weights) { nil } it "returns 0" do - expect(proposal.weight_count(1)).to eq(0) + expect(proposal.reload.weight_count(1)).to eq(0) expect(proposal.weight_count(2)).to eq(0) expect(proposal.weight_count(3)).to eq(0) expect(proposal.weight_count(100)).to eq(0) @@ -68,7 +77,7 @@ module Decidim::DecidimAwesome end it "returns the weight count for a weight" do - expect(proposal.weight_count(1)).to eq(0) + expect(proposal.reload.weight_count(1)).to eq(0) expect(proposal.weight_count(2)).to eq(0) expect(proposal.weight_count(3)).to eq(1) expect(proposal.weight_count(4)).to eq(0) @@ -99,12 +108,12 @@ module Decidim::DecidimAwesome it "increments the weight cache" do expect { create(:proposal_vote, proposal: proposal) }.to change { proposal.votes.count }.by(1) expect { create(:awesome_vote_weight, vote: proposal.votes.first, weight: 3) }.to change(Decidim::DecidimAwesome::ProposalExtraField, :count).by(1) - expect(proposal.extra_fields.vote_weight_totals).to eq({ "3" => 1 }) + expect(proposal.reload.extra_fields.vote_weight_totals).to eq({ "3" => 1 }) expect(proposal.extra_fields.weight_total).to eq(3) end context "when cache already exists" do - let(:another_proposal) { create :proposal, component: proposal.component } + let(:another_proposal) { create(:proposal, component: proposal.component) } let!(:extra_fields) { create(:awesome_proposal_extra_fields, :with_votes, proposal: proposal) } let!(:another_extra_fields) { create(:awesome_proposal_extra_fields, :with_votes, proposal: another_proposal) } @@ -188,8 +197,8 @@ module Decidim::DecidimAwesome end it "returns all vote weights for a component" do - expect(proposal.all_vote_weights).to match_array([1, 2]) - expect(another_proposal.all_vote_weights).to match_array([1, 2]) + expect(proposal.reload.all_vote_weights).to contain_exactly(1, 2) + expect(another_proposal.reload.all_vote_weights).to contain_exactly(1, 2) expect(proposal.vote_weights).to eq({ "1" => 1, "2" => 0 }) expect(another_proposal.vote_weights).to eq({ "1" => 0, "2" => 1 }) end @@ -203,15 +212,65 @@ module Decidim::DecidimAwesome end it "returns all vote weights for a component" do - expect(proposal.extra_fields.vote_weight_totals).to eq({ "3" => 1, "4" => 1 }) + expect(proposal.reload.extra_fields.vote_weight_totals).to eq({ "3" => 1, "4" => 1 }) expect(proposal.vote_weights).to eq({ "1" => 0, "2" => 0 }) proposal.update_vote_weights! expect(proposal.vote_weights).to eq({ "1" => 1, "2" => 0 }) - expect(another_proposal.vote_weights).to eq({ "1" => 0, "2" => 1 }) + expect(another_proposal.reload.vote_weights).to eq({ "1" => 0, "2" => 1 }) expect(proposal.extra_fields.vote_weight_totals).to eq({ "1" => 1 }) expect(another_proposal.extra_fields.vote_weight_totals).to eq({ "2" => 1 }) end end end + + describe "private_body" do + it "returns nil if no private_body" do + expect(extra_fields.private_body).to be_nil + expect(extra_fields.attributes["private_body"]).to be_nil + end + + it "the associated proposal has a private_body" do + expect(extra_fields.proposal.private_body).to be_nil + end + + context "when private body is set" do + before do + extra_fields.private_body = { "en" => '

Something
' } + extra_fields.save! + end + + it "sets the private body" do + expect(extra_fields.private_body["en"]).to eq('
Something
') + expect(extra_fields.attributes["private_body"]["en"]).not_to start_with("
Something
') + expect(extra_fields.proposal.private_body).to eq(extra_fields.private_body) + end + end + + context "when setting the private body from the proposal" do + before do + proposal.private_body = { "en" => '
Something
' } + end + + it "sets the private body" do + expect(proposal.private_body["en"]).to eq('
Something
') + end + end + + context "when saving the private body from the proposal" do + before do + proposal.private_body = { "en" => '
Something
' } + proposal.save! + end + + it "sets the private body" do + expect(proposal.extra_fields.private_body["en"]).to eq('
Something
') + expect(proposal.extra_fields.attributes["private_body"]["en"]).not_to start_with("
"participatory_processes", "participatory_space_slug" => slug }) } + let!(:private_config) { create(:awesome_config, organization:, var: :proposal_private_custom_fields, value: private_custom_fields) } + let!(:private_constraint) { create(:config_constraint, awesome_config: private_config, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => private_slug }) } + let!(:notes) { create_list(:proposal_note, 2, proposal:, created_at: "2024-01-01") } + + let(:slug) { participatory_process.slug } + let(:private_slug) { participatory_process.slug } + let(:body) { "
Name
John Barleycorn
" } + let(:private_body) { "
Age
12
" } + let(:all_notes) do + notes.to_h do |note| + [ + "notes/#{note.id}".to_sym, + { + created_at: note.created_at, + note: note.body, + author: note.author.name + } + ] + end + end + + describe "#serialize" do + let(:serialized) { subject.serialize } + + it "serializes the id" do + expect(serialized).to include(id: proposal.id) + end + + it "serializes private notes" do + expect(serialized).to include(all_notes) + end + + it "serializes public and private custom fields in columns" do + expect(serialized).to include("body/name/en": "John Barleycorn") + expect(serialized).to include("private_body/age": "12") + end + + context "when public fields not in scope" do + let(:slug) { "another-slug" } + + it "serializes private fields only" do + expect(serialized).to include("private_body/age": "12") + expect(serialized.keys).not_to include("body/name/en") + end + end + + context "when private fields not in scope" do + let(:private_slug) { "another-slug" } + + it "serializes public fields only" do + expect(serialized.keys).not_to include("private_body/age/en") + expect(serialized).to include("body/name/en": "John Barleycorn") + end + end + end + end +end diff --git a/spec/serializers/proposal_serializer_spec.rb b/spec/serializers/proposal_serializer_spec.rb index bfd99c0e9..6cc5b66cc 100644 --- a/spec/serializers/proposal_serializer_spec.rb +++ b/spec/serializers/proposal_serializer_spec.rb @@ -8,7 +8,7 @@ module Decidim::Proposals described_class.new(proposal) end - let!(:proposal) { create(:proposal, :accepted, component: component) } + let!(:proposal) { create(:proposal, :accepted, body: body, component: component) } let!(:another_proposal) { create(:proposal, :accepted, component: component) } let!(:extra_fields) { create(:awesome_proposal_extra_fields, proposal: proposal) } let(:weights) do @@ -27,7 +27,7 @@ module Decidim::Proposals end let!(:another_extra_fields) { create(:awesome_proposal_extra_fields, :with_votes, proposal: another_proposal) } let(:participatory_process) { component.participatory_space } - let(:component) { create :proposal_component, settings: settings } + let(:component) { create(:proposal_component, settings settings) } let(:settings) do { awesome_voting_manifest: manifest @@ -44,8 +44,15 @@ module Decidim::Proposals } end let(:manifest) { :voting_cards } - - let!(:proposals_component) { create(:component, manifest_name: "proposals", participatory_space: participatory_process) } + let(:xml) { "
Name
John Barleycorn
Age
12
" } + let(:body) do + { + "en" => xml, + "machine_translations" => { + "ca" => xml.gsub("John Barleycorn", "Joan Ordi") + } + } + end describe "#serialize" do let(:serialized) { subject.serialize } @@ -59,14 +66,43 @@ module Decidim::Proposals end it "serializes the weights" do - expect(serialized).to include(weights: labeled_weights) + expect(serialized).to include(votes: labeled_weights) end context "when no manifest" do let(:manifest) { nil } it "serializes the weights" do - expect(serialized).to include(weights: { "0" => 1, "1" => 0, "2" => 0, "3" => 2, "4" => 0, "5" => 0 }) + expect(serialized).to include(votes: { "0" => 1, "1" => 0, "2" => 0, "3" => 2, "4" => 0, "5" => 0 }) + end + end + + context "when custom fields are defined" do + let(:custom_fields) do + { + foo: "[{\"type\":\"text\",\"required\":true,\"label\":\"Name\",\"name\":\"name\",\"subtype\":\"text\"},{\"type\":\"number\",\"required\":false,\"label\":\"Age\",\"name\":\"age\",\"subtype\":\"number\"}]" + } + end + let!(:config) { create(:awesome_config, organization: participatory_process.organization, var: :proposal_custom_fields, value: custom_fields) } + let!(:constraint) { create(:config_constraint, awesome_config: config, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => slug }) } + let(:slug) { participatory_process.slug } + + it "serializes custom fields in columns" do + expect(serialized).to include("body/age/en": "12") + expect(serialized).to include("body/age/ca": "12") + expect(serialized).to include("body/name/en": "John Barleycorn") + expect(serialized).to include("body/name/ca": "Joan Ordi") + end + + context "when not in scope" do + let(:slug) { "another-slug" } + + it "does not serialize custom fields" do + expect(serialized).not_to include("body/age/en") + expect(serialized).not_to include("body/name/en") + expect(serialized).not_to include("body/age/ca") + expect(serialized).not_to include("body/name/ca") + end end end @@ -79,15 +115,14 @@ module Decidim::Proposals end before do - # rubocop:disable Rails/SkipsModelValidations: - # we don't want to trigger the active record hooks + # rubocop:disable Rails/SkipsModelValidations extra_fields.update_columns(vote_weight_totals: wrong_weights) - # rubocop:enable Rails/SkipsModelValidations: + # rubocop:enable Rails/SkipsModelValidations end it "serializes the weights" do expect(proposal.vote_weights).to eq(labeled_wrong_weights) - expect(serialized).to include(weights: labeled_weights) + expect(serialized).to include(votes: labeled_weights) extra_fields.reload expect(proposal.reload.vote_weights).to eq(labeled_weights) end diff --git a/spec/services/decidim/open_data_exporter_spec.rb b/spec/services/decidim/open_data_exporter_spec.rb new file mode 100644 index 000000000..4f2a570fe --- /dev/null +++ b/spec/services/decidim/open_data_exporter_spec.rb @@ -0,0 +1,54 @@ +# frozen_string_literal: true + +require "spec_helper" + +describe Decidim::OpenDataExporter do + describe "export proposals" do + context "with private proposals" do + subject { described_class.new(organization, path) } + + let(:organization) { create(:organization) } + let(:path) { File.join(Dir.tmpdir, "test-open-data.zip") } + let(:csv_file) { Zip::File.open(path).glob("*open-data-proposals.csv").first } + let(:csv_data) { csv_file.get_input_stream.read } + + let(:participatory_process) { create(:participatory_process, organization:) } + let(:component) { create(:proposal_component, participatory_space: participatory_process) } + + let(:public_data) do + { "foo" => '[{"type":"text","label":"Full Name","subtype":"text","className":"form-control","name":"text-1476748004559"}]' } + end + let(:private_data) do + { "bar" => '[{"type":"text","subtype":"text","label":"Phone Number","className":"form-control","name":"text-1476748007461"}]' } + end + let(:body) do + { + "en" => '
Full Name
Tiffany Woods
' + } + end + let(:private_body) { '
Phone Number
021 xxx xx 641
' } + let(:config_helper) { create(:awesome_config, organization:, var: :proposal_custom_field_foo) } + let!(:constraint) { create(:config_constraint, awesome_config: config_helper, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => participatory_process.slug }) } + let!(:config) do + create(:awesome_config, organization:, var: :proposal_custom_fields, value: public_data) + create(:awesome_config, organization:, var: :proposal_private_custom_fields, value: private_data) + end + + let!(:proposal) { create(:proposal, component:, body:, private_body:) } + + before do + subject.export + end + + it "includes proposal body fields" do + expect(csv_data).to include("body/full-name/en") + expect(csv_data).to include("Tiffany Woods") + end + + it "ignores proposal private body fields" do + expect(csv_data).not_to include("private_body/") + expect(csv_data).not_to include("021 xxx xx 641") + end + end + end +end diff --git a/spec/system/admin/admin_accountability_spec.rb b/spec/system/admin/admin_accountability_spec.rb index c55d8fe51..6c845e4ae 100644 --- a/spec/system/admin/admin_accountability_spec.rb +++ b/spec/system/admin/admin_accountability_spec.rb @@ -2,13 +2,13 @@ require "spec_helper" -describe "Admin accountability", type: :system do +describe "Admin accountability" do let(:user_creation_date) { 7.days.ago } let(:login_date) { 6.days.ago } - let(:organization) { create :organization } - let(:external_organization) { create :organization } - let!(:admin) { create :user, :admin, :confirmed, organization: organization, created_at: 9.days.ago } - let!(:external_admin) { create :user, :admin, :confirmed, organization: external_organization } + let(:organization) { create(:organization) } + let(:external_organization) { create(:organization) } + let!(:admin) { create(:user, :admin, :confirmed, organization: organization, created_at: 9.days.ago) } + let!(:external_admin) { create(:user, :admin, :confirmed, organization: external_organization) } let(:administrator) { create(:user, organization: organization, last_sign_in_at: login_date, created_at: user_creation_date) } let(:valuator) { create(:user, organization: organization, created_at: user_creation_date) } @@ -37,7 +37,7 @@ context "when admin accountability is enabled" do it "shows the admin accountability link" do - click_link "Participants" + click_link_or_button "Participants" expect(page).to have_content("Admin accountability") end @@ -47,7 +47,7 @@ let(:status) { :disabled } it "does not show the admin accountability link" do - click_link "Participants" + click_link_or_button "Participants" expect(page).not_to have_content("Admin accountability") end @@ -62,11 +62,11 @@ Decidim::ParticipatoryProcessUserRole.find_by(user: collaborator).destroy - click_link "Participants" + click_link_or_button "Participants" end - it "shows the correct information for each user", versioning: true do - click_link "Admin accountability" + it "shows the correct information for each user", :versioning do + click_link_or_button "Admin accountability" expect(page).not_to have_content("NOTE: This list might not include users created/removed before") @@ -126,8 +126,8 @@ create(:participatory_process_user_role, user: external_moderator, participatory_process: external_participatory_process, role: "moderator", created_at: 1.day.ago) end - it "does not include the other organization", versioning: true do - click_link "Admin accountability" + it "does not include the other organization", :versioning do + click_link_or_button "Admin accountability" expect(page).to have_link("Processes > #{participatory_process.title["en"]}", href: "/admin/participatory_processes/#{participatory_process.slug}/user_roles", count: 4) @@ -152,11 +152,11 @@ Decidim::ParticipatoryProcessUserRole.find_by(user: external_collaborator).destroy - click_link "Participants" - click_link "Admin accountability" + click_link_or_button "Participants" + click_link_or_button "Admin accountability" end - it "shows data only for external_organization", versioning: true do + it "shows data only for external_organization", :versioning do expect(page).not_to have_link("Processes > #{participatory_process.title["en"]}", href: "/admin/participatory_processes/#{participatory_process.slug}/user_roles") expect(page).to have_link("Processes > #{external_participatory_process.title["en"]}", @@ -186,11 +186,11 @@ create(:participatory_process_user_role, user: collaborator, participatory_process: participatory_process, role: "collaborator", created_at: 1.day.ago) - click_link "Participants" - click_link "Admin accountability" + click_link_or_button "Participants" + click_link_or_button "Admin accountability" end - it "shows currently active", versioning: true do + it "shows currently active", :versioning do within all("table tr")[1] do expect(page).to have_content("Collaborator") expect(page).to have_content(collaborator.name) @@ -228,11 +228,11 @@ collaborator.destroy create(:participatory_process_user_role, user: valuator, participatory_process: participatory_process, role: "valuator", created_at: 2.days.ago) - click_link "Participants" - click_link "Admin accountability" + click_link_or_button "Participants" + click_link_or_button "Admin accountability" end - it "shows the user as removed", versioning: true do + it "shows the user as removed", :versioning do within all("table tr")[1] do expect(page).to have_content("Valuator") expect(page).to have_content("Deleted user") @@ -255,12 +255,12 @@ let!(:second_admin) { create(:user, :admin, organization: organization, created_at: 3.days.ago) } before do - click_link "Participants" - click_link "Admin accountability" + click_link_or_button "Participants" + click_link_or_button "Admin accountability" end - it "shows the current admins", versioning: true do - click_link "List global admins" + it "shows the current admins", :versioning do + click_link_or_button "List global admins" expect(page).not_to have_content("NOTE: This list might not include users created/removed before") @@ -295,8 +295,8 @@ # rubocop:enable Rails/SkipsModelValidations: end - it "shows a warning message", versioning: true do - click_link "List global admins" + it "shows a warning message", :versioning do + click_link_or_button "List global admins" expect(page).to have_content("NOTE: This list might not include users created/removed before #{missing_date.strftime("%d/%m/%Y %H:%M")}") end end diff --git a/spec/system/admin/admin_edits_proposals_custom_fields_spec.rb b/spec/system/admin/admin_edits_proposals_custom_fields_spec.rb index 464c18fa0..1b0e9008e 100644 --- a/spec/system/admin/admin_edits_proposals_custom_fields_spec.rb +++ b/spec/system/admin/admin_edits_proposals_custom_fields_spec.rb @@ -2,19 +2,22 @@ require "spec_helper" -describe "Admin edits proposals", type: :system do +describe "Admin edits proposals" do let(:manifest_name) { "proposals" } let(:organization) { participatory_process.organization } - let!(:user) { create :user, :admin, :confirmed, organization: organization } - let!(:config) { create :awesome_config, organization: organization, var: :proposal_custom_fields, value: custom_fields } - let(:config_helper) { create :awesome_config, organization: organization, var: :proposal_custom_field_bar } + let!(:user) { create(:user, :admin, :confirmed, organization: organization) } + let!(:config) { create(:awesome_config, organization: organization, var: :proposal_custom_fields, value: custom_fields) } + let!(:private_config) { create(:awesome_config, organization: organization, var: :proposal_private_custom_fields, value: private_custom_fields) } + let(:config_helper) { create(:awesome_config, organization: organization, var: :proposal_custom_field_bar) } + let(:private_config_helper) { create(:awesome_config, organization: organization, var: :proposal_private_custom_field_baz) } let!(:constraint) { create(:config_constraint, awesome_config: config_helper, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => slug }) } + let!(:private_constraint) { create(:config_constraint, awesome_config: private_config_helper, settings: { "participatory_space_manifest" => "participatory_processes" }) } let(:slug) { participatory_process.slug } - let(:data) { "[#{data1},#{data2},#{data3}]" } let(:data1) { '{"type":"text","label":"Full Name","subtype":"text","className":"form-control","name":"text-1476748004559"}' } let(:data2) { '{"type":"select","label":"Occupation","className":"form-control","name":"select-1476748006618","values":[{"label":"Street Sweeper","value":"option-1","selected":true},{"label":"Moth Man","value":"option-2"},{"label":"Chemist","value":"option-3"}]}' } let(:data3) { '{"type":"textarea","label":"Short Bio","rows":"5","className":"form-control","name":"textarea-1476748007461"}' } + let(:private_data1) { '{"type":"text","label":"Phone Number","subtype":"text","className":"form-control","name":"text-1476748004579"}' } let(:custom_fields) do { @@ -22,6 +25,12 @@ "bar" => "[#{data3}]" } end + let(:private_custom_fields) do + { + "baz" => "[#{private_data1}]" + } + end + let!(:proposal) do create(:proposal, :official, @@ -37,88 +46,156 @@ before do visit_component_admin - find("a.action-icon--edit-proposal").click - end - - it "displays custom fields" do - expect(page).to have_content("Title") - expect(page).not_to have_content("Body") - expect(page).to have_content("Full Name") - expect(page).to have_content("Occupation") - expect(page).to have_content("Street Sweeper") - expect(page).to have_content("Short Bio") - expect(page).to have_xpath("//textarea[@class='form-control'][@id='textarea-1476748007461'][@user-data='I shot the sheriff']") - expect(page).not_to have_css(".form-error.is-visible") - - within "#proposal-body-tabs" do - click_link "Català" - - expect(page).to have_xpath("//textarea[@class='form-control'][@id='textarea-1476748007461'][@user-data='Jo disparo al sheriff']") - end + proposal.update_private_body!('
Phone Number
555-555-555
') end - context "and there are out of scope" do - let(:custom_fields) do - { - "bar" => "[#{data3}]" - } - end - let(:slug) { "another-slug" } - - it "displays normal proposal editor" do - expect(page).to have_content("Title") - expect(page).to have_content("Body") - expect(page).not_to have_content("Full Name") - expect(page).not_to have_content("Occupation") - expect(page).not_to have_content("Street Sweeper") - expect(page).not_to have_content("Short Bio") + context "when editing the proposal" do + before do + find("a.action-icon--edit-proposal").click end - end - - context "and some are scoped to other places" do - let(:slug) { "another-slug" } - it "displays the scoped fields" do + it "displays custom fields" do expect(page).to have_content("Title") expect(page).not_to have_content("Body") expect(page).to have_content("Full Name") expect(page).to have_content("Occupation") expect(page).to have_content("Street Sweeper") - expect(page).not_to have_content("Short Bio") + expect(page).to have_content("Short Bio") + expect(page).to have_xpath("//textarea[@class='form-control'][@id='textarea-1476748007461'][@user-data='I shot the sheriff']") expect(page).not_to have_css(".form-error.is-visible") + expect(page).to have_content("This information won't be published") + within "#proposal-custom-field-private_body" do + expect(page).to have_content("Phone Number") + expect(page).to have_xpath("//input[@class='form-control'][@id='text-1476748004579'][@user-data='555-555-555']") + end + + within "#proposal-body-tabs" do + click_link_or_button "Català" + + expect(page).to have_xpath("//textarea[@class='form-control'][@id='textarea-1476748007461'][@user-data='Jo disparo al sheriff']") + end end - end - context "when creating the proposal" do - it "saves the proposal in XML" do - fill_in :proposal_title_en, with: "A far west character" - fill_in :"text-1476748004559", with: "Lucky Luke" - fill_in :"textarea-1476748007461", with: "I shot everything" + context "and there are out of scope" do + let(:custom_fields) do + { + "bar" => "[#{data3}]" + } + end + let(:slug) { "another-slug" } + + it "displays normal proposal editor" do + expect(page).to have_content("Title") + expect(page).to have_content("Body") + expect(page).not_to have_content("Full Name") + expect(page).not_to have_content("Occupation") + expect(page).not_to have_content("Street Sweeper") + expect(page).not_to have_content("Short Bio") + expect(page).to have_content("This information won't be published") + within "#proposal-custom-field-private_body" do + expect(page).to have_content("Phone Number") + end + end + end - click_button "Update" + context "and some are scoped to other places" do + let(:slug) { "another-slug" } + + it "displays the scoped fields" do + expect(page).to have_content("Title") + expect(page).not_to have_content("Body") + expect(page).to have_content("Full Name") + expect(page).to have_content("Occupation") + expect(page).to have_content("Street Sweeper") + expect(page).not_to have_content("Short Bio") + expect(page).not_to have_css(".form-error.is-visible") + expect(page).to have_content("This information won't be published") + within "#proposal-custom-field-private_body" do + expect(page).to have_content("Phone Number") + end + end + end - expect(Decidim::Proposals::Proposal.last.body["en"]).to include('
Lucky Luke
') - expect(Decidim::Proposals::Proposal.last.body["en"]).to include('
I shot everything
') + context "when private fields are scoped to other places" do + let!(:private_constraint) { create(:config_constraint, awesome_config: private_config_helper, settings: { "participatory_space_manifest" => "assemblies" }) } + + it "displays the scoped fields" do + expect(page).to have_content("Title") + expect(page).not_to have_content("Body") + expect(page).to have_content("Full Name") + expect(page).to have_content("Occupation") + expect(page).to have_content("Street Sweeper") + expect(page).to have_content("Short Bio") + expect(page).not_to have_css(".form-error.is-visible") + expect(page).not_to have_content("This information won't be published") + expect(page).not_to have_css("#proposal-custom-field-private_body") + expect(page).not_to have_content("Phone Number") + end end - context "and has multiple languages" do + context "when creating the proposal" do it "saves the proposal in XML" do fill_in :proposal_title_en, with: "A far west character" fill_in :"text-1476748004559", with: "Lucky Luke" fill_in :"textarea-1476748007461", with: "I shot everything" - within "#proposal-body-tabs" do - click_link "Català" + click_link_or_button "Update" + + expect(Decidim::Proposals::Proposal.last.body["en"]).to include('
Lucky Luke
') + expect(Decidim::Proposals::Proposal.last.body["en"]).to include('
I shot everything
') + end + + context "and has multiple languages" do + it "saves the proposal in XML" do + fill_in :proposal_title_en, with: "A far west character" + fill_in :"text-1476748004559", with: "Lucky Luke" + fill_in :"textarea-1476748007461", with: "I shot everything" + + within "#proposal-body-tabs" do + click_link_or_button "Català" + end + + fill_in :"text-1476748004559", with: "Lucky Luke" + fill_in :"textarea-1476748007461", with: "Li agrada disparar" + + click_link_or_button "Update" + + expect(Decidim::Proposals::Proposal.last.body["en"]).to include('
Lucky Luke
') + expect(Decidim::Proposals::Proposal.last.body["en"]).to include('
I shot everything
') + expect(Decidim::Proposals::Proposal.last.body["ca"]).to include('
Li agrada disparar
') end + end + end + end - fill_in :"text-1476748004559", with: "Lucky Luke" - fill_in :"textarea-1476748007461", with: "Li agrada disparar" + context "when answering the proposal" do + before do + find("a.action-icon--show-proposal").click + end + + it "displays custom fields" do + expect(page).to have_content("Bio") + within "#textarea-1476748007461" do + expect(page).to have_content("I shot the sheriff") + end + click_link_or_button "Private body" + expect(page).to have_content("Phone Number") + within "#text-1476748004579" do + expect(page).to have_content("555-555-555") + end + end - click_button "Update" + context "when private fields are scoped to other places" do + let!(:private_constraint) { create(:config_constraint, awesome_config: private_config_helper, settings: { "participatory_space_manifest" => "assemblies" }) } - expect(Decidim::Proposals::Proposal.last.body["en"]).to include('
Lucky Luke
') - expect(Decidim::Proposals::Proposal.last.body["en"]).to include('
I shot everything
') - expect(Decidim::Proposals::Proposal.last.body["ca"]).to include('
Li agrada disparar
') + it "does not display private custom fields" do + expect(page).to have_content("Bio") + within "#textarea-1476748007461" do + expect(page).to have_content("I shot the sheriff") + end + expect(page).not_to have_content("Private body") + expect(page).not_to have_content("Phone Number") + expect(page).not_to have_content("555-555-555") end end end diff --git a/spec/system/admin/admin_manages_menu_overrides_spec.rb b/spec/system/admin/admin_manages_menu_overrides_spec.rb index 614ae741d..bc4791c65 100644 --- a/spec/system/admin/admin_manages_menu_overrides_spec.rb +++ b/spec/system/admin/admin_manages_menu_overrides_spec.rb @@ -3,175 +3,194 @@ require "spec_helper" require "decidim/decidim_awesome/test/shared_examples/menu_hack_contexts" -describe "Admin manages hacked menus", type: :system do - let(:organization) { create :organization } - let!(:config) { create :awesome_config, organization: organization, var: menu_name, value: previous_menu } +describe "Admin manages hacked menus" do + let(:organization) { create(:organization) } + let!(:config) { create(:awesome_config, organization: organization, var: menu_name, value: previous_menu) } let!(:user) { create(:user, :admin, :confirmed, organization: organization) } - let!(:participatory_process) { create :participatory_process, organization: organization } + let!(:participatory_process) { create(:participatory_process, organization: organization) } let(:previous_menu) do [] end include_context "with menu hacks params" - before do - Decidim::MenuRegistry.register :menu do |menu| - menu.add_item :native_menu, - "Native", - "/some-path?locale=ca", - position: 5 - end - switch_to_host(organization.host) - login_as user, scope: :user - visit decidim_admin_decidim_awesome.menu_hacks_path - end - - after do - Decidim::MenuRegistry.find(:menu).configurations.pop - end - - context "when visiting the index" do - it "shows default menu items" do - within "table tbody" do - expect(page).to have_content("Home") - expect(page).to have_content("Processes") - expect(page).to have_content("Help") + shared_examples "admin manages menu overrides" do + before do + Decidim::MenuRegistry.register menu_id do |menu| + menu.add_item :native_menu, + "Native", + "/some-path?locale=ca", + position: 5 end + switch_to_host(organization.host) + login_as user, scope: :user + visit decidim_admin_decidim_awesome.menu_hacks_path(menu_id: menu_id) end - it "allows to edit a default item" do - within find("tr", text: "Home") do - click_link "Edit" - end - - fill_in "menu_raw_label_en", with: "A new beggining" - find("*[type=submit]").click - - within "table tbody" do - expect(page).to have_content("A new beggining") - expect(page).not_to have_content("Home") - end + after do + Decidim::MenuRegistry.find(menu_id).configurations.pop end - it "allows to create a new item" do - click_link "New item" - - fill_in "menu_raw_label_en", with: "Blog" - fill_in "menu_url", with: "http://external.blog" - fill_in "menu_position", with: "1.5" - - find("*[type=submit]").click - - within "table tbody" do - expect(page).to have_content("Home") - expect(page).to have_content("Blog") - expect(page).to have_content("http://external.blog") - expect(page).to have_content("Processes") - expect(page).to have_content("Help") + context "when visiting the index" do + it "shows default menu items" do + within "table tbody" do + default_menu_labels.each do |label| + expect(page).to have_content(label) + end + end end - end - context "when native menu has query strings" do - it "allows to edit it" do - within find("tr", text: "Native") do - click_link "Edit" + it "allows to edit a default item" do + within "tr", text: default_menu_item[:label] do + click_link_or_button "Edit" end - fill_in "menu_raw_label_en", with: "Native edited" - find("*[type=submit]").click + fill_in "menu_raw_label_en", with: "A new beggining" + click_link_or_button "Save" within "table tbody" do - expect(page).to have_content("Native edited") - expect(page).to have_content("/some-path") - expect(page).not_to have_content("/some-path?locale=ca") + expect(page).to have_content("A new beggining") + expect(page).not_to have_content("Home") end end - end - context "when menu has overrides" do - include_context "with menu hacks params" + it "allows to create a new item" do + click_link_or_button "New item" - let(:url) { "/" } - let(:previous_menu) do - [{ "url" => url, "label" => { "en" => "A new beggining" }, "position" => 10 }] - end + fill_in "menu_raw_label_en", with: "Blog" + fill_in "menu_url", with: "http://external.blog" + fill_in "menu_position", with: "1.5" + + click_link_or_button "Save" - it "shows default and overrides menu items" do within "table tbody" do - expect(page).to have_content("A new beggining") - expect(page).not_to have_content("Home") - expect(page).to have_content("Processes") - expect(page).to have_content("Help") + default_menu_labels.each do |label| + expect(page).to have_content(label) + end + expect(page).to have_content("Blog") + expect(page).to have_content("http://external.blog") end end - it "can be edited" do - within find("tr", text: "A new beggining") do - click_link "Edit" - end + context "when native menu has query strings" do + it "allows to edit it" do + within "tr", text: "Native" do + click_link_or_button "Edit" + end - fill_in "menu_raw_label_en", with: "Another thing" - find("*[type=submit]").click + fill_in "menu_raw_label_en", with: "Native edited" + click_link_or_button "Save" - within "table tbody" do - expect(page).to have_content("Another thing") - expect(page).not_to have_content("A new beggining") - expect(page).not_to have_content("Home") + within "table tbody" do + expect(page).to have_content("Native edited") + expect(page).to have_content("/some-path") + expect(page).not_to have_content("/some-path?locale=ca") + end end end - it "can be deleted" do - within find("tr", text: "A new beggining") do - accept_confirm { click_link "Remove customization" } + context "when menu has overrides" do + include_context "with menu hacks params" + + let(:url) { default_menu_item[:path] } + let(:previous_menu) do + [{ "url" => url, "label" => { "en" => "A new beggining" }, "position" => 10 }] end - within "table tbody" do - expect(page).to have_content("Home") - expect(page).not_to have_content("A new beggining") + it "shows default and overrides menu items" do + within "table tbody" do + expect(page).to have_content("A new beggining") + expect(page).not_to have_content(default_menu_item[:label]) + (default_menu_labels - [default_menu_item[:label]]).each do |label| + expect(page).to have_content(label) + end + end end - end - end - context "when menu has new items" do - include_context "with menu hacks params" + it "can be edited" do + within "tr", text: "A new beggining" do + click_link_or_button "Edit" + end - let(:url) { "/a-new-link" } - let(:previous_menu) do - [{ "url" => url, "label" => { "en" => "A new link" }, "position" => 10 }] - end + fill_in "menu_raw_label_en", with: "Another thing" + click_link_or_button "Save" - it "shows default and overrides menu items" do - within "table tbody" do - expect(page).to have_content("Home") - expect(page).to have_content("Processes") - expect(page).to have_content("Help") - expect(page).to have_content("A new link") + within "table tbody" do + expect(page).to have_content("Another thing") + expect(page).not_to have_content("A new beggining") + expect(page).not_to have_content("Home") + end end - end - it "can be edited" do - within find("tr", text: "A new link") do - click_link "Edit" + it "can be deleted" do + within "tr", text: "A new beggining" do + accept_confirm { click_link_or_button "Remove customization" } + end + + within "table tbody" do + expect(page).to have_content(default_menu_item[:label]) + expect(page).not_to have_content("A new beggining") + end end + end - fill_in "menu_raw_label_en", with: "Another thing" - find("*[type=submit]").click + context "when menu has new items" do + include_context "with menu hacks params" - within "table tbody" do - expect(page).to have_content("Another thing") - expect(page).not_to have_content("A new link") + let(:url) { "/a-new-link" } + let(:previous_menu) do + [{ "url" => url, "label" => { "en" => "A new link" }, "position" => 10 }] end - end - it "can be deleted" do - within find("tr", text: "A new link") do - accept_confirm { click_link "Remove addition" } + it "shows default and overrides menu items" do + within "table tbody" do + default_menu_labels.each do |label| + expect(page).to have_content(label) + end + expect(page).to have_content("A new link") + end end - within "table tbody" do - expect(page).not_to have_content("A new link") + it "can be edited" do + within "tr", text: "A new link" do + click_link_or_button "Edit" + end + + fill_in "menu_raw_label_en", with: "Another thing" + click_link_or_button "Save" + + within "table tbody" do + expect(page).to have_content("Another thing") + expect(page).not_to have_content("A new link") + end + end + + it "can be deleted" do + within "tr", text: "A new link" do + accept_confirm { click_link_or_button "Remove addition" } + end + + within "table tbody" do + expect(page).not_to have_content("A new link") + end end end end end + + context "with main menu" do + let!(:menu_name) { "menu" } + let(:default_menu_labels) { %w(Home Processes Help) } + let(:default_menu_item) { { label: "Home", path: "/" } } + + it_behaves_like "admin manages menu overrides" + end + + context "with home content block menu" do + let!(:menu_name) { "home_content_block_menu" } + let(:default_menu_labels) { %w(Processes) } + let(:default_menu_item) { { label: "Processes", path: "/processes" } } + + it_behaves_like "admin manages menu overrides" + end end diff --git a/spec/system/admin/admin_manages_proposal_custom_fields_spec.rb b/spec/system/admin/admin_manages_proposal_custom_fields_spec.rb index 96b9221a0..9cc7c6a06 100644 --- a/spec/system/admin/admin_manages_proposal_custom_fields_spec.rb +++ b/spec/system/admin/admin_manages_proposal_custom_fields_spec.rb @@ -1,16 +1,18 @@ # frozen_string_literal: true require "spec_helper" -require "decidim/decidim_awesome/test/shared_examples/box_label_editor" +require "decidim/decidim_awesome/test/shared_examples/box_label_editor_examples" +require "decidim/decidim_awesome/test/shared_examples/custom_fields_examples" -describe "Admin manages custom proposal fields", type: :system do - let(:organization) { create :organization } +describe "Admin manages custom proposal fields" do + let(:organization) { create(:organization) } let!(:admin) { create(:user, :admin, :confirmed, organization: organization) } let(:custom_fields) do {} end - let!(:config) { create :awesome_config, organization: organization, var: :proposal_custom_fields, value: custom_fields } - let(:config_helper) { create :awesome_config, organization: organization, var: :proposal_custom_field_bar } + let(:var_name) { :proposal_custom_field } + let!(:config) { create(:awesome_config, organization: organization, var: "#{var_name}s", value: custom_fields) } + let(:config_helper) { create(:awesome_config, organization: organization, var: "#{var_name}_bar") } let!(:constraint) { create(:config_constraint, awesome_config: config_helper, settings: { "participatory_space_manifest" => "participatory_processes", component_manifest: "proposals" }) } let!(:another_constraint) { create(:config_constraint, awesome_config: config_helper, settings: { "participatory_space_manifest" => "participatory_processes" }) } @@ -22,171 +24,55 @@ before do switch_to_host(organization.host) login_as admin, scope: :user - visit decidim_admin_decidim_awesome.config_path(:proposal_custom_fields) end - context "when creating a new box" do - it "saves the content" do - click_link 'Add a new "custom fields" box' - - expect(page).to have_admin_callout("created successfully") - - sleep 2 - # page.execute_script("$('.proposal_custom_fields_editor:first')[0].FormBuilder.actions.setData(#{data})") - page.execute_script("document.querySelector('.proposal_custom_fields_editor').FormBuilder.actions.setData(#{data})") - - find("*[type=submit]").click - - sleep 2 - expect(page).to have_admin_callout("updated successfully") - expect(page).to have_content("Full Name") - expect(page).to have_content("Occupation") - expect(page).to have_content("Street Sweeper") - expect(page).to have_content("Short Bio") + describe "public custom fields" do + before do + visit decidim_admin_decidim_awesome.config_path(:proposal_custom_fields) end - end - context "when updating new box" do - let(:data) { "[#{data1},#{data3}]" } - let(:custom_fields) do - { - "foo" => "[#{data1},#{data2}]", - "bar" => "[]" - } - end - - it "updates the content" do - sleep 2 - expect(page).to have_content("Full Name") - expect(page).to have_content("Occupation") - expect(page).to have_content("Street Sweeper") - expect(page).not_to have_content("Short Bio") + it_behaves_like "creates a new box", "custom fields" - page.execute_script("$('.proposal_custom_fields_container[data-key=\"foo\"] .proposal_custom_fields_editor')[0].FormBuilder.actions.setData(#{data})") - find("*[type=submit]").click - - sleep 2 - expect(page).to have_admin_callout("updated successfully") - expect(page).to have_content("Full Name") - expect(page).not_to have_content("Occupation") - expect(page).not_to have_content("Street Sweeper") - expect(page).to have_content("Short Bio") - end - - it_behaves_like "edits box label inline", :fields, :foo - - context "when removing a box" do + context "when updating new box" do + let(:data) { "[#{data1},#{data3}]" } let(:custom_fields) do { - "foo" => "[#{data1}]", - "bar" => "[#{data2}]" + "foo" => "[#{data1},#{data2}]", + "bar" => "[]" } end - it "updates the content" do - sleep 2 - expect(page).to have_content("Full Name") - expect(page).to have_content("Occupation") - expect(page).to have_content("Street Sweeper") - expect(page).not_to have_content("Short Bio") - - within ".proposal_custom_fields_container[data-key=\"foo\"]" do - accept_confirm { click_link 'Remove this "custom fields" box' } - end + it_behaves_like "edits box label inline", :fields, :foo + it_behaves_like "updates a box" + it_behaves_like "removes a box", "custom fields" + it_behaves_like "adds a constraint" + it_behaves_like "removes a constraint" + end + end - sleep 2 - expect(page).to have_admin_callout("removed successfully") - expect(page).not_to have_content("Full Name") - expect(page).to have_content("Occupation") - expect(page).to have_content("Street Sweeper") - expect(page).not_to have_content("Short Bio") + describe "private custom fields" do + let(:var_name) { :proposal_private_custom_field } - expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization: organization, var: :proposal_custom_field_foo)).not_to be_present - expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization: organization, var: :proposal_custom_field_bar)).to be_present - end + before do + visit decidim_admin_decidim_awesome.config_path(:proposal_private_custom_fields) end - context "when adding a constraint" do + it_behaves_like "creates a new box", "private custom fields" + + context "when updating new box" do + let(:data) { "[#{data1},#{data3}]" } let(:custom_fields) do { - "foo" => "[#{data1}]", - "bar" => "[#{data2}]" + "foo" => "[#{data1},#{data2}]", + "bar" => "[]" } end - it "adds a new config helper var" do - within ".proposal_custom_fields_container[data-key=\"foo\"]" do - click_link "Add case" - end - - select "Processes", from: "constraint_participatory_space_manifest" - within ".modal-content" do - find("*[type=submit]").click - end - - sleep 2 - - within ".proposal_custom_fields_container[data-key=\"foo\"] .constraints-editor" do - expect(page).to have_content("Processes") - end - - expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization: organization, var: :proposal_custom_field_bar)).to be_present - expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization: organization, var: :proposal_custom_field_bar).constraints.first.settings).to eq(constraint.settings) - end - - context "when removing a constraint" do - let(:custom_fields) do - { - "foo" => "[#{data1}]", - "bar" => "[#{data2}]" - } - end - - it "removes the helper config var" do - within ".proposal_custom_fields_container[data-key=\"bar\"] .constraints-editor" do - expect(page).to have_content("Processes") - expect(page).to have_content("Proposals") - end - - within ".proposal_custom_fields_container[data-key=\"bar\"]" do - within first(".constraints-list li") do - click_link "Delete" - end - end - - within ".proposal_custom_fields_container[data-key=\"bar\"] .constraints-editor" do - expect(page).not_to have_content("Proposals") - end - - visit decidim_admin_decidim_awesome.config_path(:proposal_custom_fields) - - within ".proposal_custom_fields_container[data-key=\"bar\"] .constraints-editor" do - expect(page).not_to have_content("Proposals") - end - - expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization: organization, var: :proposal_custom_field_bar)).to be_present - expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization: organization, var: :proposal_custom_field_bar).constraints.count).to eq(1) - expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization: organization, var: :proposal_custom_field_bar).constraints.first).to eq(another_constraint) - end - - context "and there is only one constraint" do - let!(:another_constraint) { nil } - - it "do not remove the helper config var" do - within ".proposal_custom_fields_container[data-key=\"bar\"]" do - click_link "Delete" - end - - within ".proposal_custom_fields_container[data-key=\"bar\"] .constraints-editor" do - expect(page).to have_content("Proposals") - end - - expect(page).to have_content("Sorry, this cannot be deleted") - expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization: organization, var: :proposal_custom_field_bar).constraints.count).to eq(1) - expect(Decidim::DecidimAwesome::AwesomeConfig.find_by(organization: organization, var: :proposal_custom_field_bar).constraints.first).to eq(constraint) - end - end - end + it_behaves_like "edits box label inline", :fields, :foo + it_behaves_like "updates a box" + it_behaves_like "removes a box", "private custom fields" + it_behaves_like "adds a constraint" + it_behaves_like "removes a constraint" end end end diff --git a/spec/system/admin/admin_manages_scoped_admins_spec.rb b/spec/system/admin/admin_manages_scoped_admins_spec.rb index c8dff6c73..d75640e57 100644 --- a/spec/system/admin/admin_manages_scoped_admins_spec.rb +++ b/spec/system/admin/admin_manages_scoped_admins_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true require "spec_helper" -require "decidim/decidim_awesome/test/shared_examples/box_label_editor" +require "decidim/decidim_awesome/test/shared_examples/box_label_editor_examples" -describe "Admin manages scoped admins", type: :system do - let(:organization) { create :organization } +describe "Admin manages scoped admins" do + let(:organization) { create(:organization) } let!(:admin) { create(:user, :admin, :confirmed, organization: organization) } let!(:user) { create(:user, :confirmed, organization: organization) } let!(:user2) { create(:user, :confirmed, organization: organization) } @@ -12,8 +12,8 @@ let(:admins) do {} end - let!(:config) { create :awesome_config, organization: organization, var: :scoped_admins, value: admins } - let(:config_helper) { create :awesome_config, organization: organization, var: :scoped_admin_bar } + let!(:config) { create(:awesome_config, organization: organization, var: :scoped_admins, value: admins) } + let(:config_helper) { create(:awesome_config, organization: organization, var: :scoped_admin_bar) } let!(:constraint) { create(:config_constraint, awesome_config: config_helper, settings: { "participatory_space_manifest" => "participatory_processes" }) } before do @@ -24,7 +24,7 @@ context "when creating a new box" do it "saves the content" do - click_link 'Add a new "Scoped Admins" group' + click_link_or_button 'Add a new "Scoped Admins" group' expect(page).to have_admin_callout("created successfully") @@ -32,7 +32,7 @@ sleep 1 page.execute_script("$('.multiusers-select:first').append(new Option('#{user.name}', #{user.id}, true, true)).trigger('change');") - find("*[type=submit]").click + click_link_or_button "Update configuration" expect(page).to have_admin_callout("updated successfully") expect(page).to have_content(user.name.to_s) @@ -47,7 +47,7 @@ sleep 1 page.execute_script("$('.multiusers-select:first').append(new Option('#{user.name}', #{user.id}, true, true)).trigger('change');") - find("*[type=submit]").click + click_link_or_button "Update configuration" expect(page).to have_admin_callout("updated successfully") expect(page).to have_content(user.name.to_s) @@ -81,7 +81,7 @@ expect(page).to have_content(user3.name.to_s) within ".scoped_admins_container[data-key=\"foo\"]" do - accept_confirm { click_link 'Remove this "Scoped Admins" group' } + accept_confirm { click_link_or_button 'Remove this "Scoped Admins" group' } end expect(page).to have_admin_callout("removed successfully") @@ -102,11 +102,11 @@ it "adds a new config helper var" do within ".scoped_admins_container[data-key=\"foo\"]" do - click_link "Add case" + click_link_or_button "Add case" end select "Processes", from: "constraint_participatory_space_manifest" - within ".modal-content" do + within "#new-modal-scoped_admin_foo" do find("*[type=submit]").click end @@ -133,8 +133,8 @@ expect(page).to have_content("Processes") end - within ".scoped_admins_container[data-key=\"bar\"]" do - click_link "Delete" + within ".scoped_admins_container[data-key=\"bar\"] .constraints-list" do + click_link_or_button "Delete" end within ".scoped_admins_container[data-key=\"bar\"] .constraints-editor" do diff --git a/spec/system/admin/admin_manages_scoped_styles_spec.rb b/spec/system/admin/admin_manages_scoped_styles_spec.rb index 92895cbbd..7c84e92b2 100644 --- a/spec/system/admin/admin_manages_scoped_styles_spec.rb +++ b/spec/system/admin/admin_manages_scoped_styles_spec.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true require "spec_helper" -require "decidim/decidim_awesome/test/shared_examples/box_label_editor" +require "decidim/decidim_awesome/test/shared_examples/box_label_editor_examples" -describe "Admin manages scoped styles", type: :system do - let(:organization) { create :organization } +describe "Admin manages scoped styles" do + let(:organization) { create(:organization) } let!(:admin) { create(:user, :admin, :confirmed, organization: organization) } let(:styles) do {} end - let!(:config) { create :awesome_config, organization: organization, var: :scoped_styles, value: styles } - let(:config_helper) { create :awesome_config, organization: organization, var: :scoped_style_bar } + let!(:config) { create(:awesome_config, organization: organization, var: :scoped_styles, value: styles) } + let(:config_helper) { create(:awesome_config, organization: organization, var: :scoped_style_bar) } let!(:constraint) { create(:config_constraint, awesome_config: config_helper, settings: { "participatory_space_manifest" => "participatory_processes" }) } before do @@ -21,14 +21,14 @@ context "when creating a new box" do it "saves the content in the hash" do - click_link "Add a new CSS box" + click_link_or_button "Add a new CSS box" expect(page).to have_admin_callout("created successfully") sleep 1 page.execute_script('document.querySelector(".CodeMirror").CodeMirror.setValue("body {background: red;}");') - find("*[type=submit]").click + click_link_or_button "Update configuration" expect(page).to have_admin_callout("updated successfully") expect(page).to have_content("body {background: red;}") @@ -42,7 +42,7 @@ sleep 1 page.execute_script("document.querySelector(\"[data-key=#{key}] .CodeMirror\").CodeMirror.setValue(\"body {background: green;}\");") - find("*[type=submit]").click + click_link_or_button "Update configuration" expect(page).to have_admin_callout("updated successfully") expect(page).not_to have_content("body {background: red;}") @@ -53,7 +53,7 @@ it "shows error message if invalid" do sleep 1 page.execute_script("document.querySelector(\"[data-key=#{key}] .CodeMirror\").CodeMirror.setValue(\"I am invalid CSS\");") - find("*[type=submit]").click + click_link_or_button "Update configuration" expect(page).to have_admin_callout("Error updating configuration! CSS in box ##{key} is invalid") expect(page).not_to have_content("body {background: red;}") @@ -90,7 +90,7 @@ expect(page).to have_content("body {background: blue;}") within ".scoped_styles_container[data-key=\"foo\"]" do - accept_confirm { click_link "Remove this CSS box" } + accept_confirm { click_link_or_button "Remove this CSS box" } end expect(page).to have_admin_callout("removed successfully") @@ -110,17 +110,13 @@ end it "adds a new config helper var" do - within ".scoped_styles_container[data-key=\"foo\"]" do - click_link "Add case" - end + find("#new-scoped_style_foo").click select "Processes", from: "constraint_participatory_space_manifest" - within ".modal-content" do + within "#new-modal-scoped_style_foo" do find("*[type=submit]").click end - sleep 2 - within ".scoped_styles_container[data-key=\"foo\"] .constraints-editor" do expect(page).to have_content("Processes") end @@ -142,8 +138,8 @@ expect(page).to have_content("Processes") end - within ".scoped_styles_container[data-key=\"bar\"]" do - click_link "Delete" + within ".scoped_styles_container[data-key=\"bar\"] .constraints-editor" do + click_link_or_button "Delete" end within ".scoped_styles_container[data-key=\"bar\"] .constraints-editor" do diff --git a/spec/system/admin/admin_spec.rb b/spec/system/admin/admin_spec.rb index 6f100c13e..6d978baf4 100644 --- a/spec/system/admin/admin_spec.rb +++ b/spec/system/admin/admin_spec.rb @@ -3,8 +3,8 @@ require "spec_helper" require "decidim/decidim_awesome/test/shared_examples/config_examples" -describe "Visit the admin page", type: :system do - let(:organization) { create :organization, rich_text_editor_in_public_views: rte_enabled } +describe "Visit the admin page" do + let(:organization) { create(:organization, rich_text_editor_in_public_views: rte_enabled) } let!(:admin) { create(:user, :admin, :confirmed, organization: organization) } let(:rte_enabled) { true } let(:disabled_features) { [] } @@ -16,11 +16,13 @@ disabled_features.each do |feature| allow(Decidim::DecidimAwesome.config).to receive(feature).and_return(:disabled) end - + Decidim::MenuRegistry.destroy(:awesome_admin_menu) + Decidim::DecidimAwesome::Menu.instance_variable_set(:@menus, nil) + Decidim::DecidimAwesome::Menu.register_awesome_admin_menu! switch_to_host(organization.host) login_as admin, scope: :user visit decidim_admin.root_path - click_link "Decidim awesome" + click_link_or_button "Decidim awesome" end it_behaves_like "javascript config vars" @@ -33,20 +35,22 @@ context "when visiting system compatibility" do before do - click_link "System Compatibility" + click_link_or_button "System Compatibility" end it "renders the page" do expect(page).to have_content(/System Compatibility Checks/i) - expect(page).not_to have_xpath("//span[@class='text-alert']") - expect(page).to have_xpath("//span[@class='text-success']") + expect(page).not_to have_xpath("//span[@class='fill-alert']") + expect(page).to have_xpath("//span[@class='fill-success']") end context "and header is overriden" do let(:version) { "0.11" } it "detects missing css" do - expect(page).to have_xpath("//span[@class='text-alert']", count: 1) + within ".decidim-version" do + expect(page).to have_xpath("//span[@class='fill-alert']", count: 1) + end end end end @@ -54,20 +58,19 @@ context "when visiting editor hacks" do context "when editor hacks are enabled" do before do - click_link "Editor Hacks" + click_link_or_button "Editor Hacks" end it_behaves_like "has menu link", "editors" it "renders the page" do - expect(page).to have_content(/Tweaks for editors/i) + expect(page).to have_content(/Tweaks for Editor Hacks/i) end end context "when editor hacks are disabled" do let(:disabled_features) do - [:allow_images_in_full_editor, :allow_images_in_small_editor, :use_markdown_editor, - :allow_images_in_markdown_editor] + [:allow_images_in_editors, :allow_videos_in_editors] end it_behaves_like "do not have menu link", "editors" @@ -77,7 +80,7 @@ context "when visiting surveys hacks" do context "when survey hacks are enabled" do before do - click_link "Surveys & Forms" + click_link_or_button "Surveys & Forms" end it_behaves_like "has menu link", "surveys" @@ -97,7 +100,7 @@ context "when visiting proposal hacks" do context "when proposal hacks are enabled" do before do - click_link "Proposals Hacks" + click_link_or_button "Proposals Hacks" end it_behaves_like "has menu link", "proposals" @@ -105,7 +108,6 @@ it "renders the page" do expect(page).to have_content(/Tweaks for proposals/i) expect(page).to have_content("Customize sorting options for the proposals list") - expect(page).to have_content("\"Rich text editor for participants\" is enabled") expect(page).to have_content("User input validations for the \"title\" field") expect(page).to have_content("User input validations for the \"body\" field") end @@ -164,13 +166,13 @@ context "when visiting live chat" do context "when livechat hacks are enabled" do before do - click_link "Live Chat" + click_link_or_button "Live Chat" end it_behaves_like "has menu link", "livechat" it "renders the page" do - expect(page).to have_content(/Tweaks for livechat/i) + expect(page).to have_content(/Tweaks for Live Chat/i) end end @@ -184,13 +186,13 @@ context "when visiting CSS tweaks" do context "when scoped styles are enabled" do before do - click_link "Custom Styles" + click_link_or_button "Custom Styles" end it_behaves_like "has menu link", "styles" it "renders the page" do - expect(page).to have_content(/Tweaks for styles/i) + expect(page).to have_content(/Tweaks for Custom Styles/i) end end @@ -203,15 +205,21 @@ context "when visiting Menu hacks" do context "when menu_hacks are enabled" do + let(:disabled_features) { [] } + before do - click_link "Menu Tweaks" + click_link_or_button "Menu Tweaks" end - it_behaves_like "has menu link", "menu_hacks" do + it_behaves_like "has menu link", "menus/home_content_block_menu/hacks" do let(:prefix) { "" } end - it "renders the page" do + it_behaves_like "has menu link", "menus/menu/hacks" do + let(:prefix) { "" } + end + + it "renders the main menu page" do expect(page).to have_content(/Main menu/i) end end @@ -228,7 +236,7 @@ context "when visiting custom redirections" do context "when custom_redirections are enabled" do before do - click_link "Custom Redirections" + click_link_or_button "Custom Redirections" end it_behaves_like "has menu link", "custom_redirects" do @@ -250,13 +258,13 @@ context "when visiting Scoped Admins" do context "when menu_hacks are enabled" do before do - click_link "Scoped Admins" + click_link_or_button "Scoped Admins" end it_behaves_like "has menu link", "admins" it "renders the page" do - expect(page).to have_content(/Tweaks for admins/i) + expect(page).to have_content(/Tweaks for Scoped Admins/i) end end @@ -270,13 +278,13 @@ context "when visiting proposal custom fields" do context "when custom fields are enabled" do before do - click_link "Proposals Custom Fields" + click_link_or_button "Proposals Custom Fields" end it_behaves_like "has menu link", "proposal_custom_fields" it "renders the page" do - expect(page).to have_content(/Tweaks for proposal_custom_fields/i) + expect(page).to have_content(/Tweaks for Proposals Custom Fields: Public fields/i) end end @@ -288,4 +296,26 @@ it_behaves_like "do not have menu link", "proposal_custom_fields" end end + + context "when visiting private proposal custom fields" do + context "when private custom fields are enabled" do + before do + click_link_or_button "Private fields" + end + + it_behaves_like "has menu link", "proposal_private_custom_fields" + + it "renders the page" do + expect(page).to have_content(/Tweaks for Proposals Custom Fields: Private fields/i) + end + end + + context "when private custom fields are disabled" do + let(:disabled_features) do + [:proposal_private_custom_fields] + end + + it_behaves_like "do not have menu link", "proposal_private_custom_fields" + end + end end diff --git a/spec/system/admin/scoped_admins_spec.rb b/spec/system/admin/scoped_admins_spec.rb index 5c713c9b6..b88a9bc20 100644 --- a/spec/system/admin/scoped_admins_spec.rb +++ b/spec/system/admin/scoped_admins_spec.rb @@ -3,8 +3,8 @@ require "spec_helper" require "decidim/decidim_awesome/test/shared_examples/scoped_admins_examples" -describe "Scoped admin journeys", type: :system do - let(:organization) { create :organization } +describe "Scoped admin journeys" do + let(:organization) { create(:organization) } let!(:assembly) { create(:assembly, organization: organization) } let!(:component) { create(:proposal_component, participatory_space: assembly) } let!(:proposal) { create(:proposal, :official, component: component) } @@ -16,8 +16,8 @@ let!(:user) { create(:user, :confirmed, organization: organization) } let!(:user_accepted) { create(:user, :confirmed, :admin_terms_accepted, organization: organization) } let!(:admin) { create(:user, :confirmed, :admin, organization: organization) } - let!(:config) { create :awesome_config, organization: organization, var: :scoped_admins, value: admins } - let(:config_helper) { create :awesome_config, organization: organization, var: :scoped_admin_bar, value: nil } + let!(:config) { create(:awesome_config, organization: organization, var: :scoped_admins, value: admins) } + let(:config_helper) { create(:awesome_config, organization: organization, var: :scoped_admin_bar, value: nil) } let!(:constraint) { create(:config_constraint, awesome_config: config_helper, settings: settings) } let(:admins) do { @@ -73,16 +73,15 @@ context "and admin terms not accepted" do it "allows admin terms to be accepted" do - welcome_text = "Welcome to the Admin Panel." - welcome_text = "Welcome to the Decidim Admin Panel." if legacy_version? + welcome_text = "Dashboard" visit decidim_admin.root_path - expect(page).to have_content("Agree to the terms and conditions of use") + expect(page).to have_content("Please take a moment to review the admin terms of service.") - click_button "I agree with the terms" + click_link_or_button "I agree with the terms" expect(page).to have_content(welcome_text) - expect(page).not_to have_content("Review them now") + expect(page).not_to have_content("Please take a moment to review the admin terms of service.") end end diff --git a/spec/system/awesome_map/awesome_map_spec.rb b/spec/system/awesome_map/awesome_map_spec.rb index cea574def..796be792e 100644 --- a/spec/system/awesome_map/awesome_map_spec.rb +++ b/spec/system/awesome_map/awesome_map_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -describe "Show awesome map", type: :system do +describe "Show awesome map" do include_context "with a component" let(:manifest_name) { "awesome_map" } @@ -13,12 +13,11 @@ let!(:accepted_proposal) { create(:proposal, :accepted, title: { en: "Accepted proposal" }, component: proposal_component, latitude: 40, longitude: -50) } let!(:evaluating_proposal) { create(:proposal, :evaluating, title: { en: "Evaluating proposal" }, component: proposal_component, latitude: 30, longitude: 45) } let!(:not_answered_proposal) { create(:proposal, :not_answered, title: { en: "Not answered proposal" }, component: proposal_component, latitude: 70, longitude: 6) } - let!(:null_state_proposal) { create(:proposal, state: nil, title: { en: "Null state proposal" }, component: proposal_component, latitude: 50, longitude: 10) } let!(:withdrawn_proposal) { create(:proposal, :withdrawn, title: { en: "Withdrawn proposal" }, component: proposal_component, latitude: 60, longitude: -30) } let!(:rejected_proposal) { create(:proposal, :rejected, title: { en: "Rejected proposal" }, component: proposal_component, latitude: 10, longitude: 80) } let!(:category) { create(:category, participatory_space: participatory_process) } let!(:subcategory) { create(:subcategory, parent: category, participatory_space: participatory_process) } - let!(:user) { create :user, :confirmed, organization: organization } + let!(:user) { create(:user, :confirmed, organization: organization) } let(:active_step_id) { component.participatory_space.active_step.id } let(:settings) do { @@ -51,7 +50,7 @@ # static: { url: "https://image.maps.ls.hereapi.com/mia/1.6/mapview" } dynamic: { tile_layer: { - url: "http://#{organization.host}:#{Capybara.current_session.server.port}/tile-0.png" + url: "/tile-0.png" } } } @@ -64,15 +63,11 @@ end it "shows the map" do - within ".wrapper" do + within "[data-content]" do expect(page).not_to have_content("maximum complexity") - expect(page).to have_selector(".awesome-map") - expect(page).to have_selector("#awesome-map") - errors = if legacy_version? - page.driver.browser.manage.logs.get(:browser) - else - page.driver.browser.logs.get(:browser) - end + expect(page).to have_css(".awesome-map") + expect(page).to have_css("#awesome-map") + errors = page.driver.browser.logs.get(:browser) errors.each do |error| expect(error.message).not_to include("map.js"), error.message if error.level == "SEVERE" @@ -85,7 +80,7 @@ expect(page).to have_xpath("//link[@rel='stylesheet'][contains(@href,'decidim_decidim_awesome_map')]", visible: :all) expect(page).to have_xpath("//link[@rel='stylesheet'][contains(@href,'decidim_map')]", visible: :all) end - within(legacy_version? ? "head" : ".wrapper", visible: :all) do + within("[data-content]", visible: :all) do expect(page).to have_xpath("//script[contains(@src,'decidim_decidim_awesome_map')]", visible: :all) expect(page).to have_xpath("//script[contains(@src,'decidim_map')]", visible: :all) end @@ -101,11 +96,10 @@ context "when step settings are all true" do it "shows all proposals markers" do sleep(3) - expect(page.body).to have_selector("div[title='#{accepted_proposal.title["en"]}']") - expect(page.body).to have_selector("div[title='#{evaluating_proposal.title["en"]}']") - expect(page.body).to have_selector("div[title='#{rejected_proposal.title["en"]}']") - expect(page.body).to have_selector("div[title='#{withdrawn_proposal.title["en"]}']") - expect(page.body).to have_selector("div[title='#{null_state_proposal.title["en"]}']") + expect(page.body).to have_css("div[title='#{accepted_proposal.title["en"]}']") + expect(page.body).to have_css("div[title='#{evaluating_proposal.title["en"]}']") + expect(page.body).to have_css("div[title='#{rejected_proposal.title["en"]}']") + expect(page.body).to have_css("div[title='#{withdrawn_proposal.title["en"]}']") end end @@ -118,11 +112,10 @@ it "does not show any proposal" do sleep(3) - expect(page.body).not_to have_selector("div[title='#{accepted_proposal.title["en"]}']") - expect(page.body).not_to have_selector("div[title='#{evaluating_proposal.title["en"]}']") - expect(page.body).not_to have_selector("div[title='#{rejected_proposal.title["en"]}']") - expect(page.body).not_to have_selector("div[title='#{withdrawn_proposal.title["en"]}']") - expect(page.body).not_to have_selector("div[title='#{null_state_proposal.title["en"]}']") + expect(page.body).not_to have_css("div[title='#{accepted_proposal.title["en"]}']") + expect(page.body).not_to have_css("div[title='#{evaluating_proposal.title["en"]}']") + expect(page.body).not_to have_css("div[title='#{rejected_proposal.title["en"]}']") + expect(page.body).not_to have_css("div[title='#{withdrawn_proposal.title["en"]}']") end end @@ -135,11 +128,10 @@ it "only shows proposal without state" do sleep(3) - expect(page.body).not_to have_selector("div[title='#{accepted_proposal.title["en"]}']") - expect(page.body).not_to have_selector("div[title='#{evaluating_proposal.title["en"]}']") - expect(page.body).not_to have_selector("div[title='#{rejected_proposal.title["en"]}']") - expect(page.body).not_to have_selector("div[title='#{withdrawn_proposal.title["en"]}']") - expect(page.body).to have_selector("div[title='#{null_state_proposal.title["en"]}']") + expect(page.body).not_to have_css("div[title='#{accepted_proposal.title["en"]}']") + expect(page.body).not_to have_css("div[title='#{evaluating_proposal.title["en"]}']") + expect(page.body).not_to have_css("div[title='#{rejected_proposal.title["en"]}']") + expect(page.body).not_to have_css("div[title='#{withdrawn_proposal.title["en"]}']") end end diff --git a/spec/system/check_images_in_editors_spec.rb b/spec/system/check_images_in_editors_spec.rb index 09ee219eb..9f799a3de 100644 --- a/spec/system/check_images_in_editors_spec.rb +++ b/spec/system/check_images_in_editors_spec.rb @@ -33,7 +33,7 @@ it "displays no image for normal proposal" do click_link_or_button translated(normal_proposal.title) - expect(page).to have_no_css("img[src*='https://www.example.com/someimage.jpeg']") + expect(page).not_to have_css("img[src*='https://www.example.com/someimage.jpeg']") end end diff --git a/spec/system/create_proposal_custom_fields_spec.rb b/spec/system/create_proposal_custom_fields_spec.rb index ed0fef65c..8602f5fc1 100644 --- a/spec/system/create_proposal_custom_fields_spec.rb +++ b/spec/system/create_proposal_custom_fields_spec.rb @@ -5,21 +5,26 @@ describe "Custom proposals fields", type: :system do include_context "with a component" let(:manifest_name) { "proposals" } + + let!(:participatory_process) { create(:participatory_process, :with_steps, organization: organization) } let!(:component) do create(:proposal_component, :with_creation_enabled, manifest: manifest, participatory_space: participatory_process) end - let!(:config) { create :awesome_config, organization: organization, var: :proposal_custom_fields, value: custom_fields } - let(:config_helper) { create :awesome_config, organization: organization, var: :proposal_custom_field_bar } + let!(:config) { create(:awesome_config, organization: organization, var: :proposal_custom_fields, value: custom_fields) } + let!(:private_config) { create(:awesome_config, organization: organization, var: :proposal_private_custom_fields, value: private_custom_fields) } + let(:config_helper) { create(:awesome_config, organization: organization, var: :proposal_custom_field_bar) } + let(:private_config_helper) { create(:awesome_config, organization: organization, var: :proposal_private_custom_field_baz) } let!(:constraint) { create(:config_constraint, awesome_config: config_helper, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => slug }) } + let!(:private_constraint) { create(:config_constraint, awesome_config: private_config_helper, settings: { "participatory_space_manifest" => "participatory_processes" }) } let(:slug) { participatory_process.slug } - let(:data) { "[#{data1},#{data2},#{data3}]" } let(:data1) { '{"type":"text","label":"Full Name","subtype":"text","className":"form-control","name":"text-1476748004559"}' } let(:data2) { '{"type":"select","label":"Occupation","className":"form-control","name":"select-1476748006618","values":[{"label":"Street Sweeper","value":"option-1","selected":true},{"label":"Moth Man","value":"option-2"},{"label":"Chemist","value":"option-3"}]}' } let(:data3) { '{"type":"textarea","label":"Short Bio","rows":"5","className":"form-control","name":"textarea-1476748007461"}' } + let(:private_data1) { '{"type":"text","label":"Phone Number","subtype":"text","className":"form-control","name":"text-1476748004579"}' } let(:custom_fields) do { @@ -28,6 +33,12 @@ } end + let(:private_custom_fields) do + { + "baz" => "[#{private_data1}]" + } + end + before do login_as user, scope: :user visit_component @@ -35,7 +46,7 @@ click_link "New proposal" end - it "displays custom fields" do + it "displays custom fields & private fields" do expect(page).to have_content("Title") expect(page).not_to have_content("Body") expect(page).to have_content("Full Name") @@ -43,6 +54,10 @@ expect(page).to have_content("Street Sweeper") expect(page).to have_content("Short Bio") expect(page).not_to have_css(".form-error.is-visible") + expect(page).to have_content("This information won't be published") + within "#proposal-custom-field-private_body" do + expect(page).to have_content("Phone Number") + end end context "when there are not custom fields" do @@ -53,13 +68,17 @@ end let(:slug) { "another-slug" } - it "displays normal proposal editor" do + it "displays normal proposal editor and private fields" do expect(page).to have_content("Title") expect(page).to have_content("Body") expect(page).not_to have_content("Full Name") expect(page).not_to have_content("Occupation") expect(page).not_to have_content("Street Sweeper") expect(page).not_to have_content("Short Bio") + expect(page).to have_content("This information won't be published") + within "#proposal-custom-field-private_body" do + expect(page).to have_content("Phone Number") + end end end @@ -74,6 +93,27 @@ expect(page).to have_content("Street Sweeper") expect(page).not_to have_content("Short Bio") expect(page).not_to have_css(".form-error.is-visible") + expect(page).to have_content("This information won't be published") + within "#proposal-custom-field-private_body" do + expect(page).to have_content("Phone Number") + end + end + end + + context "when private fields are scoped to other places" do + let!(:private_constraint) { create(:config_constraint, awesome_config: private_config_helper, settings: { "participatory_space_manifest" => "assemblies" }) } + + it "displays the scoped fields" do + expect(page).to have_content("Title") + expect(page).not_to have_content("Body") + expect(page).to have_content("Full Name") + expect(page).to have_content("Occupation") + expect(page).to have_content("Street Sweeper") + expect(page).to have_content("Short Bio") + expect(page).not_to have_css(".form-error.is-visible") + expect(page).not_to have_content("This information won't be published") + expect(page).not_to have_css("#proposal-custom-field-private_body") + expect(page).not_to have_content("Phone Number") end end @@ -82,6 +122,7 @@ fill_in :proposal_title, with: "A far west character" fill_in :"text-1476748004559", with: "Lucky Luke" fill_in :"textarea-1476748007461", with: "I shot everything" + fill_in :"text-1476748004579", with: "123456789" click_button "Continue" sleep 1 @@ -90,10 +131,24 @@ expect(page).to have_content("Occupation") expect(page).to have_content("Street Sweeper") expect(page).to have_content("Short Bio") + expect(page).to have_content("Phone Number") expect(page).to have_xpath("//textarea[@class='form-control'][@id='textarea-1476748007461'][@user-data='I shot everything']") + expect(page).not_to have_xpath("//textarea[@class='form-control'][@id='text-1476748004579'][@user-data='123456789']") expect(page).not_to have_css(".form-error.is-visible") expect(Decidim::Proposals::Proposal.last.body["en"]).to include('
Lucky Luke
') expect(Decidim::Proposals::Proposal.last.body["en"]).to include('
I shot everything
') + expect(Decidim::Proposals::Proposal.last.private_body).to include('
123456789
') + click_on "Send" + expect(page).to have_content("Publish your proposal") + click_on "Publish" + expect(page).to have_content("A far west character") + expect(page).to have_content("Full Name") + expect(page).to have_content("Lucky Luke") + expect(page).to have_content("Occupation") + expect(page).to have_content("Street Sweeper") + expect(page).to have_content("Short Bio") + expect(page).not_to have_content("Phone Number") + expect(page).not_to have_content("123456789") end end end diff --git a/spec/system/edit_proposal_custom_fields_spec.rb b/spec/system/edit_proposal_custom_fields_spec.rb index 814ecf524..1962d8c6e 100644 --- a/spec/system/edit_proposal_custom_fields_spec.rb +++ b/spec/system/edit_proposal_custom_fields_spec.rb @@ -13,26 +13,34 @@ participatory_space: participatory_process) end let(:rte_enabled) { false } - let!(:proposal) { create :proposal, :with_amendments, users: [author], body: body, component: component } - let(:author) { create :user, :confirmed, organization: organization } - let!(:config) { create :awesome_config, organization: organization, var: :proposal_custom_fields, value: custom_fields } - let(:config_helper) { create :awesome_config, organization: organization, var: :proposal_custom_field_foo } + let!(:proposal) { create(:proposal, :with_amendments, users: [author], body: body, component: component) } + let(:author) { create(:user, :confirmed, organization: organization) } + let!(:config) { create(:awesome_config, organization: organization, var: :proposal_custom_fields, value: custom_fields) } + let!(:private_config) { create(:awesome_config, organization: organization, var: :proposal_private_custom_fields, value: private_custom_fields) } + let(:config_helper) { create(:awesome_config, organization: organization, var: :proposal_custom_field_foo) } + let(:private_config_helper) { create(:awesome_config, organization: organization, var: :proposal_private_custom_field_baz) } let!(:constraint) { create(:config_constraint, awesome_config: config_helper, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => slug }) } + let!(:private_constraint) { create(:config_constraint, awesome_config: config_helper, settings: { "participatory_space_manifest" => "participatory_processes" }) } let(:slug) { participatory_process.slug } let(:body) do { en: answer } end let(:answer) { '
Occupation
Moth Man
Bio
I shot the sheriff
' } - let(:data) { "[#{data1},#{data2},#{data3}]" } let(:data1) { '{"type":"text","label":"Full Name","subtype":"text","className":"form-control","name":"text-1476748004559"}' } let(:data2) { '{"type":"select","label":"Occupation","className":"form-control","name":"select-1476748006618","values":[{"label":"Street Sweeper","value":"option-1","selected":true},{"label":"Moth Man","value":"option-2"},{"label":"Chemist","value":"option-3"}]}' } let(:data3) { '{"type":"textarea","label":"Short Bio","rows":"5","className":"form-control","name":"textarea-1476748007461"}' } - + let(:private_data1) { '{"type":"text","label":"Phone Number","subtype":"text","className":"form-control","name":"text-1476748004579"}' } + let(:model) { proposal } let(:custom_fields) do { "foo" => "[#{data1},#{data2},#{data3}]" } end + let(:private_custom_fields) do + { + "baz" => "[#{private_data1}]" + } + end before do organization.update(rich_text_editor_in_public_views: rte_enabled) @@ -41,7 +49,7 @@ end shared_examples "has custom fields" do |textarea| - it "displays custom fields" do + it "displays public and private" do expect(page).to have_content("Title") expect(page).not_to have_content("Body") expect(page).to have_content("Full Name") @@ -51,6 +59,10 @@ expect(page).to have_content("Short Bio") expect(page).to have_xpath(textarea) expect(page).not_to have_css(".form-error.is-visible") + expect(page).to have_content("This information won't be published") + within "#proposal-custom-field-private_body" do + expect(page).to have_content("Phone Number") + end end end @@ -59,6 +71,7 @@ fill_in title_field, with: "A far west character" fill_in :"text-1476748004559", with: "Lucky Luke" fill_in :"textarea-1476748007461", with: "I shot everything" + fill_in :"text-1476748004579", with: "555-555-555" click_button button sleep 1 @@ -66,9 +79,13 @@ if xpath expect(page).to have_xpath("//input[@class='form-control'][@id='text-1476748004559'][@user-data='Lucky Luke']") expect(page).to have_xpath("//textarea[@class='form-control'][@id='textarea-1476748007461'][@user-data='I shot everything']") + expect(page).to have_xpath("//input[@class='form-control'][@id='text-1476748004579'][@user-data='555-555-555']") else - expect(page).to have_selector("dd#text-1476748004559", text: "Lucky Luke") - expect(page).to have_selector("dd#textarea-1476748007461", text: "I shot everything") + expect(page).to have_css("dd#text-1476748004559", text: "Lucky Luke") + expect(page).to have_css("dd#textarea-1476748007461", text: "I shot everything") + expect(page).not_to have_css("dd#text-1476748004579", text: "555-555-555") + expect(page).not_to have_content("Phone Number") + expect(model.reload.private_body).to include('
555-555-555
') end expect(page).to have_content("Occupation") expect(page).to have_content("Moth Man") @@ -87,6 +104,8 @@ expect(page).not_to have_content("Short Bio") expect(page).to have_content("I shot the sheriff") expect(page).not_to have_css(".form-error.is-visible") + expect(page).not_to have_content("This information won't be published") + expect(page).not_to have_content("Phone Number") end end @@ -119,12 +138,14 @@ end context "and custom fields are out of scope" do + let!(:private_constraint) { create(:config_constraint, awesome_config: private_config_helper, settings: { "participatory_space_manifest" => "assemblies" }) } let(:slug) { "another-slug" } it_behaves_like "has default fields" end context "and proposal has unformatted content" do + let!(:private_constraint) { create(:config_constraint, awesome_config: private_config_helper, settings: { "participatory_space_manifest" => "assemblies" }) } let(:answer) { "I shot the Sheriff\\nbut not Deputy" } it "has custom fields with content in the first textarea" do @@ -137,6 +158,8 @@ expect(page).to have_content("Short Bio") expect(page).to have_xpath("//textarea[@class='form-control'][@id='textarea-1476748007461'][@user-data='I shot the Sheriff\\nbut not Deputy']") expect(page).to have_css(".form-error.is-visible") + expect(page).not_to have_content("This information won't be published") + expect(page).not_to have_content("Phone Number") end end @@ -150,6 +173,8 @@ expect(page).to have_content("Moth Man") expect(page).to have_content("Short Bio") expect(page).not_to have_css(".form-error.is-visible") + expect(page).to have_content("This information won't be published") + expect(page).to have_content("Phone Number") end end end @@ -175,6 +200,7 @@ end context "and custom fields are out of scope" do + let!(:private_constraint) { create(:config_constraint, awesome_config: private_config_helper, settings: { "participatory_space_manifest" => "assemblies" }) } let(:slug) { "another-slug" } it_behaves_like "has default fields" @@ -212,6 +238,7 @@ participatory_space: participatory_process) end let!(:collaborative_draft) { create :collaborative_draft, users: [author, user], body: answer, component: component } + let(:model) { collaborative_draft } before do click_link "Access collaborative drafts" diff --git a/spec/system/public/awesome_iframe_spec.rb b/spec/system/public/awesome_iframe_spec.rb new file mode 100644 index 000000000..10b507fd5 --- /dev/null +++ b/spec/system/public/awesome_iframe_spec.rb @@ -0,0 +1,83 @@ +# frozen_string_literal: true + +require "spec_helper" + +describe "Show awesome iframe" do + include_context "with a component" + let(:manifest_name) { "awesome_iframe" } + + let!(:user) { create(:user, :confirmed, organization: organization) } + let(:settings) do + { + announcement: announcement, + iframe: iframe, + viewport_width: viewport_width + } + end + + let(:iframe) { '' } + let(:viewport_width) { false } + let(:announcement) { {} } + + before do + component.update!(settings: settings) + visit_component + click_link_or_button "Change cookie settings" + click_link_or_button "Accept all" + end + + it "shows the iframe wrapper" do + within "[data-content]" do + expect(page).to have_css(".awesome-iframe") + end + end + + it "shows the iframe" do + within ".awesome-iframe" do + expect(page).to have_css("iframe") + end + end + + it "adds the #html-block-html id" do + within "[data-content]" do + expect(page).to have_css("#html-block-html.awesome-iframe") + end + end + + context "when announcement is present" do + let(:announcement) do + { + en: "I'm awesome!" + } + end + + it "shows the announcement" do + within "[data-content]" do + expect(page).to have_content("I'm awesome!") + end + end + end + + context "when viewport_width is enabled" do + let(:viewport_width) { true } + + it "adds the #iframe-block id" do + within "[data-content]" do + expect(page).to have_css("#iframe-block.awesome-iframe") + end + end + end + + context "when iframe code contains a script in srcdoc" do + let(:iframe) { '' } + + it "removes the script" do + within ".awesome-iframe" do + expect(page).not_to have_css("script") + expect(page).to have_css("iframe") + expect(page).not_to have_text("XSS") + expect { page.driver.browser.switch_to.alert }.to raise_error(Selenium::WebDriver::Error::NoSuchAlertError) + end + end + end +end diff --git a/spec/system/public/edit_proposals_spec.rb b/spec/system/public/edit_proposals_spec.rb new file mode 100644 index 000000000..cba99a241 --- /dev/null +++ b/spec/system/public/edit_proposals_spec.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true + +require "spec_helper" +require "decidim/decidim_awesome/test/shared_examples/editor_examples" + +describe "Show proposals editor" do + include_context "with a component" + let(:manifest_name) { "proposals" } + let!(:component) do + create(:proposal_component, + manifest: manifest, + participatory_space: participatory_process) + end + + let!(:proposal) { create(:proposal, users: [user], skip_injection: true, component: component) } + let(:proposal_title) { translated(proposal.title) } + + let!(:user) { create(:user, :confirmed, organization: organization) } + let(:rte_enabled) { false } + let!(:allow_images_in_proposals) { create(:awesome_config, organization: organization, var: :allow_images_in_proposals, value: images_in_proposals) } + let!(:allow_images_in_editors) { create(:awesome_config, organization: organization, var: :allow_images_in_editors, value: images_editor) } + let!(:allow_videos_in_editors) { create(:awesome_config, organization: organization, var: :allow_videos_in_editors, value: videos_editor) } + let(:images_in_proposals) { false } + let(:images_editor) { false } + let(:videos_editor) { false } + let(:editor_selector) { "textarea#proposal_body" } + let(:image) { Decidim::Dev.test_file("city.jpeg", "image/jpeg") } + + before do + organization.update(rich_text_editor_in_public_views: rte_enabled) + login_as user, scope: :user + visit_component + + click_link_or_button proposal_title + click_link_or_button "Edit proposal" + end + + context "when rich text editor is enabled for participants" do + let(:rte_enabled) { true } + + it_behaves_like "has no image support" + it_behaves_like "has no video support" + + context "and images in RTE are enabled" do + let(:images_editor) { true } + + it_behaves_like "has image support" + end + + context "and videos in RTE are enabled" do + let(:videos_editor) { true } + + it_behaves_like "has video support" + end + + context "and both in RTE are enabled" do + let(:images_editor) { true } + let(:videos_editor) { true } + + it_behaves_like "has image support" + it_behaves_like "has video support" + end + end + + context "when rich text editor is NOT enabled for participants" do + it_behaves_like "has no drag and drop" + + context "and images in proposals is enabled" do + let(:images_in_proposals) { true } + + it_behaves_like "has drag and drop" + end + end +end diff --git a/spec/system/public/home_content_block_menu_hacks_spec.rb b/spec/system/public/home_content_block_menu_hacks_spec.rb new file mode 100644 index 000000000..bebabadea --- /dev/null +++ b/spec/system/public/home_content_block_menu_hacks_spec.rb @@ -0,0 +1,197 @@ +# frozen_string_literal: true + +require "spec_helper" + +describe "Hacked home content block menu" do + let(:organization) { create(:organization) } + let!(:participatory_process) { create(:participatory_process, organization: organization) } + let!(:config) { create(:awesome_config, organization: organization, var: :home_content_block_menu, value: menu) } + let(:menu) { [overriden, added] } + let(:overriden) do + { + url: "/processes", + label: { + "en" => "Mastering projects" + }, + position: 10 + } + end + let(:added) do + { + url: "http://external.blog", + label: { + "en" => "Blog" + }, + position: 9 + } + end + let(:disabled_features) { [] } + let!(:menu_content_block) { create(:content_block, organization: organization, manifest_name: :global_menu, scope_name: :homepage) } + + before do + disabled_features.each do |feature| + allow(Decidim::DecidimAwesome.config).to receive(feature).and_return(:disabled) + end + + switch_to_host(organization.host) + visit decidim.root_path + end + + it "renders the hacked menu" do + within "#home__menu" do + expect(page).not_to have_content("Processes") + expect(page).to have_content("Mastering projects") + expect(page).to have_content("Blog") + end + end + + it "renders in the proper order" do + within "#home__menu div.home__menu-element:nth-child(1)" do + expect(page).to have_content("Blog") + end + within "#home__menu div.home__menu-element:last-child" do + expect(page).to have_content("Mastering projects") + end + end + + describe "visibility" do + let(:visibility) { "default" } + let(:overriden) do + { + url: "/processes", + label: { + "en" => "Mastering projects" + }, + position: 10, + visibility: visibility + } + end + + it "renders the item" do + within "#home__menu" do + expect(page).to have_content("Mastering projects") + end + end + + context "when hidden" do + let(:visibility) { "hidden" } + + it "do not show the menu item" do + within "#home__menu" do + expect(page).not_to have_content("Mastering projects") + end + end + end + + context "when logged" do + let(:visibility) { "logged" } + + it "do not show the menu item" do + within "#home__menu" do + expect(page).not_to have_content("Mastering projects") + end + end + end + + context "when non logged" do + let(:visibility) { "non_logged" } + + it "do not show the menu item" do + within "#home__menu" do + expect(page).to have_content("Mastering projects") + end + end + end + + context "when user is logged" do + let!(:user) { create(:user, :confirmed, organization: organization) } + + before do + switch_to_host(organization.host) + login_as user, scope: :user + visit decidim.root_path + end + + context "when hidden" do + let(:visibility) { "hidden" } + + it "do not show the menu item" do + within "#home__menu" do + expect(page).not_to have_content("Mastering projects") + end + end + end + + context "when logged" do + let(:visibility) { "logged" } + + it "do not show the menu item" do + within "#home__menu" do + expect(page).to have_content("Mastering projects") + end + end + end + + context "when non logged" do + let(:visibility) { "non_logged" } + + it "do not show the menu item" do + within "#home__menu" do + expect(page).not_to have_content("Mastering projects") + end + end + end + + context "when only verified user", with_authorization_workflows: ["dummy_authorization_handler"] do + let!(:authorization) { create(:authorization, granted_at: Time.zone.now, user: user, name: "dummy_authorization_handler") } + let(:visibility) { "verified_user" } + + before do + switch_to_host(organization.host) + login_as user, scope: :user + visit decidim.root_path + end + + context "when user is verified" do + it "shows the item" do + within "#home__menu" do + expect(page).to have_content("Mastering projects") + end + end + end + + context "when user is not verified" do + let(:authorization) { nil } + + it "shows the item" do + within "#home__menu" do + expect(page).not_to have_content("Mastering projects") + end + end + end + + context "when verification is expired" do + let!(:authorization) { create(:authorization, granted_at: 3.months.ago, user: user, name: "dummy_authorization_handler") } + + it "shows the item" do + within "#home__menu" do + expect(page).not_to have_content("Mastering projects") + end + end + end + end + + context "when menu is :disabled" do + let(:disabled_features) { [:home_content_block_menu] } + + it "renders the normal menu" do + within "#home__menu" do + expect(page).to have_content("Processes") + expect(page).not_to have_content("Mastering projects") + expect(page).not_to have_content("Blog") + end + end + end + end + end +end diff --git a/spec/system/voting_cards_spec.rb b/spec/system/voting_cards_spec.rb index c862d5ba7..82ddc2408 100644 --- a/spec/system/voting_cards_spec.rb +++ b/spec/system/voting_cards_spec.rb @@ -2,10 +2,10 @@ require "spec_helper" -describe "Voting weights with cards", type: :system do +describe "Voting weights with cards" do include_context "with a component" let(:voting_manifest) { :voting_cards } - let!(:component) { create :proposal_component, :with_votes_enabled, participatory_space: participatory_space, settings: settings } + let!(:component) { create(:proposal_component, :with_votes_enabled, participatory_space: participatory_space, settings: settings) } let(:settings) do { vote_limit: vote_limit, @@ -22,7 +22,7 @@ let!(:proposals) { create_list(:proposal, 4, component: component) } let(:proposal) { proposals.first } let(:proposal_title) { translated(proposal.title) } - let(:user) { create :user, :confirmed, organization: organization } + let(:user) { create(:user, :confirmed, organization: organization) } let(:abstain) { true } let(:box_title) { nil } let(:instructions) { nil } @@ -37,9 +37,7 @@ before do login_as user, scope: :user visit_component - within "#proposal-#{proposal.id}-vote-button" do - click_link "Click to vote" - end + click_link_or_button proposal.title["en"] end it "has correct copies" do @@ -49,45 +47,45 @@ expect(page).to have_content("Red") expect(page).to have_content("Yellow") expect(page).not_to have_content("Change my vote") - expect(page).to have_selector(".vote-count[data-weight=\"1\"]", text: "0") - expect(page).to have_selector(".vote-count[data-weight=\"2\"]", text: "0") - expect(page).to have_selector(".vote-count[data-weight=\"3\"]", text: "0") + expect(page).to have_css(".vote-count[data-weight=\"1\"]", text: "0") + expect(page).to have_css(".vote-count[data-weight=\"2\"]", text: "0") + expect(page).to have_css(".vote-count[data-weight=\"3\"]", text: "0") - click_link "Abstain" + click_link_or_button "Abstain" within ".vote_proposal_modal" do expect(page).to have_content("My vote on \"#{strip_tags(proposal_title)}\" is \"Abstain\"") expect(page).to have_content("Please read the election rules carefully to understand how your vote will be used by #{organization.name}") - click_button "Cancel" + click_link_or_button "Cancel" end %w(Green Yellow Red).each do |color| - within ".button--vote-button" do - click_link color + within ".voting-voting_cards" do + click_link_or_button color end within ".vote_proposal_modal" do expect(page).to have_content("My vote on \"#{strip_tags(proposal_title)}\" is \"#{color}\"") - click_button "Cancel" + click_link_or_button "Cancel" end end end shared_examples "can vote" do |color, weight| it "votes with modal" do - expect(page).to have_selector(".vote-count[data-weight=\"#{weight}\"]", text: "0") if weight != "0" - within ".button--vote-button" do - click_link color + expect(page).to have_css(".vote-count[data-weight=\"#{weight}\"]", text: "0") if weight != "0" + within ".voting-voting_cards" do + click_link_or_button color end within ".vote_proposal_modal" do - click_button "Proceed" + click_link_or_button "Proceed" end %w(0 1 2 3).each do |w| - expect(page).to have_selector(".vote-action.weight_#{w}.disabled") + expect(page).to have_css(".vote-action.weight_#{w}.disabled") if w == weight - expect(page).to have_selector(".vote-count[data-weight=\"#{w}\"]", text: "1") if w != "0" - expect(page).not_to have_selector(".vote-action.weight_#{w}.dim") - expect(page).to have_selector(".vote-action.weight_#{w}.voted") + expect(page).to have_css(".vote-count[data-weight=\"#{w}\"]", text: "1") if w != "0" + expect(page).not_to have_css(".vote-action.weight_#{w}.dim") + expect(page).to have_css(".vote-action.weight_#{w}.voted") else - expect(page).to have_selector(".vote-count[data-weight=\"#{w}\"]", text: "0") if w != "0" - expect(page).to have_selector(".vote-action.weight_#{w}.dim") + expect(page).to have_css(".vote-count[data-weight=\"#{w}\"]", text: "0") if w != "0" + expect(page).to have_css(".vote-action.weight_#{w}.dim") end end expect(page).to have_content("Change my vote") @@ -131,7 +129,7 @@ let(:instructions) { "Custom instructions" } it "has custom modal message" do - click_link "Red" + click_link_or_button "Red" within ".vote_proposal_modal" do expect(page).to have_content("Custom instructions") end @@ -152,17 +150,17 @@ end it "shows existing votes" do - expect(page).to have_selector(".vote-count[data-weight=\"1\"]", text: "3") - expect(page).to have_selector(".vote-count[data-weight=\"2\"]", text: "2") - expect(page).to have_selector(".vote-count[data-weight=\"3\"]", text: "1") + expect(page).to have_css(".vote-count[data-weight=\"1\"]", text: "3") + expect(page).to have_css(".vote-count[data-weight=\"2\"]", text: "2") + expect(page).to have_css(".vote-count[data-weight=\"3\"]", text: "1") end it "updates vote counts when the user votes" do - click_link "Green" - expect(page).to have_selector(".vote-count[data-weight=\"3\"]", text: "2") - click_link "Change my vote" - click_link "Abstain" - expect(page).to have_selector(".vote-count[data-weight=\"3\"]", text: "1") + click_link_or_button "Green" + expect(page).to have_css(".vote-count[data-weight=\"3\"]", text: "2") + click_link_or_button "Change my vote" + click_link_or_button "Abstain" + expect(page).to have_css(".vote-count[data-weight=\"3\"]", text: "1") end end end @@ -189,31 +187,29 @@ end it "shows the vote count" do - within "#proposal_#{proposal.id}" do + within "#proposals__proposal_#{proposal.id}" do expect(page).to have_content("G: 1") expect(page).to have_content("Y: 2") expect(page).to have_content("R: 3") expect(page).to have_content("A: 4") - expect(page).to have_link("Click to vote") end end context "when votes are blocked" do - let!(:component) { create :proposal_component, :with_votes_blocked, participatory_space: participatory_space, settings: settings } + let!(:component) { create(:proposal_component, :with_votes_blocked, participatory_space: participatory_space, settings: settings) } it "shows the vote count and the vote button is disabled" do - within "#proposal_#{proposal.id}" do + within "#proposals__proposal_#{proposal.id}" do expect(page).to have_content("G: 1") - expect(page).to have_content("SUPPORTS DISABLED") - click_link "Click to vote" end - expect(page).to have_selector(".vote-count[data-weight=\"1\"]", text: "3") - expect(page).to have_selector(".vote-count[data-weight=\"2\"]", text: "2") - expect(page).to have_selector(".vote-count[data-weight=\"3\"]", text: "1") - expect(page).to have_selector(".vote-action.weight_1.disabled") - expect(page).to have_selector(".vote-action.weight_2.disabled") - expect(page).to have_selector(".vote-action.weight_3.disabled") - expect(page).to have_selector(".vote-action.weight_0.disabled") + click_link_or_button proposal.title["en"] + expect(page).to have_css(".vote-count[data-weight=\"1\"]", text: "3") + expect(page).to have_css(".vote-count[data-weight=\"2\"]", text: "2") + expect(page).to have_css(".vote-count[data-weight=\"3\"]", text: "1") + expect(page).to have_css(".vote-action.weight_1.disabled") + expect(page).to have_css(".vote-action.weight_2.disabled") + expect(page).to have_css(".vote-action.weight_3.disabled") + expect(page).to have_css(".vote-action.weight_0.disabled") expect(page).not_to have_content("Change my vote") end end @@ -227,19 +223,19 @@ it "shows the vote count and the vote button is disabled" do visit_component - within "#proposal_#{proposal.id}" do + within "#proposals__proposal_#{proposal.id}" do expect(page).not_to have_content("G: 1") - click_link "Click to vote" end - expect(page).not_to have_selector(".vote-count[data-weight=\"1\"]") - expect(page).not_to have_selector(".vote-count[data-weight=\"2\"]") - expect(page).not_to have_selector(".vote-count[data-weight=\"3\"]") + click_link_or_button proposal.title["en"] + expect(page).not_to have_css(".vote-count[data-weight=\"1\"]") + expect(page).not_to have_css(".vote-count[data-weight=\"2\"]") + expect(page).not_to have_css(".vote-count[data-weight=\"3\"]") expect(page).not_to have_content("Change my vote") - click_link "Green" - expect(page).not_to have_selector(".vote-count[data-weight=\"3\"]") - click_link "Change my vote" - click_link "Abstain" - expect(page).not_to have_selector(".vote-count[data-weight=\"3\"]") + click_link_or_button "Green" + expect(page).not_to have_css(".vote-count[data-weight=\"3\"]") + click_link_or_button "Change my vote" + click_link_or_button "Abstain" + expect(page).not_to have_css(".vote-count[data-weight=\"3\"]") end end @@ -254,21 +250,20 @@ let(:vote_limit) { 3 } it "shows the vote count and the vote button is disabled" do - within "#proposal_#{proposal.id}" do + within "#proposals__proposal_#{proposal.id}" do expect(page).to have_content("G: 0") expect(page).to have_content("Y: 0") expect(page).to have_content("R: 1") expect(page).to have_content("A: 0") - expect(page).to have_content("VOTED") - click_link "Click to vote" end - expect(page).to have_selector(".vote-count[data-weight=\"1\"]", text: "1") - expect(page).to have_selector(".vote-count[data-weight=\"2\"]", text: "0") - expect(page).to have_selector(".vote-count[data-weight=\"3\"]", text: "0") - expect(page).to have_selector(".vote-action.weight_1.disabled") - expect(page).to have_selector(".vote-action.weight_2.disabled") - expect(page).to have_selector(".vote-action.weight_3.disabled") - expect(page).to have_selector(".vote-action.weight_0.disabled") + click_link_or_button proposal.title["en"] + expect(page).to have_css(".vote-count[data-weight=\"1\"]", text: "1") + expect(page).to have_css(".vote-count[data-weight=\"2\"]", text: "0") + expect(page).to have_css(".vote-count[data-weight=\"3\"]", text: "0") + expect(page).to have_css(".vote-action.weight_1.disabled") + expect(page).to have_css(".vote-action.weight_2.disabled") + expect(page).to have_css(".vote-action.weight_3.disabled") + expect(page).to have_css(".vote-action.weight_0.disabled") expect(page).to have_content("Change my vote") end @@ -283,21 +278,20 @@ let(:vote_limit) { 2 } it "shows the vote count and the vote button is disabled" do - within "#proposal_#{proposal.id}" do + within "#proposals__proposal_#{proposal.id}" do expect(page).to have_content("G: 0") expect(page).to have_content("Y: 0") expect(page).to have_content("R: 1") expect(page).to have_content("A: 0") - expect(page).to have_content("NO SUPPORTS REMAINING") - click_link "Click to vote" end - expect(page).to have_selector(".vote-count[data-weight=\"1\"]", text: "1") - expect(page).to have_selector(".vote-count[data-weight=\"2\"]", text: "0") - expect(page).to have_selector(".vote-count[data-weight=\"3\"]", text: "0") - expect(page).to have_selector(".vote-action.weight_1.disabled") - expect(page).to have_selector(".vote-action.weight_2.disabled") - expect(page).to have_selector(".vote-action.weight_3.disabled") - expect(page).to have_selector(".vote-action.weight_0.disabled") + click_link_or_button proposal.title["en"] + expect(page).to have_css(".vote-count[data-weight=\"1\"]", text: "1") + expect(page).to have_css(".vote-count[data-weight=\"2\"]", text: "0") + expect(page).to have_css(".vote-count[data-weight=\"3\"]", text: "0") + expect(page).to have_css(".vote-action.weight_1.disabled") + expect(page).to have_css(".vote-action.weight_2.disabled") + expect(page).to have_css(".vote-action.weight_3.disabled") + expect(page).to have_css(".vote-action.weight_0.disabled") expect(page).not_to have_content("Change my vote") expect(page).to have_content("No supports remaining") end @@ -314,21 +308,20 @@ let(:modal_help) { false } it "shows the vote count and the vote button is disabled" do - within "#proposal_#{proposal.id}" do + within "#proposals__proposal_#{proposal.id}" do expect(page).to have_content("G: 0") expect(page).to have_content("Y: 0") expect(page).to have_content("R: 1") expect(page).to have_content("A: 0") - expect(page).to have_content("SUPPORT LIMIT REACHED") - click_link "Click to vote" end - expect(page).to have_selector(".vote-count[data-weight=\"1\"]", text: "1") - expect(page).to have_selector(".vote-count[data-weight=\"2\"]", text: "0") - expect(page).to have_selector(".vote-count[data-weight=\"3\"]", text: "0") - expect(page).to have_selector(".vote-action.weight_1.disabled") - expect(page).to have_selector(".vote-action.weight_2.disabled") - expect(page).to have_selector(".vote-action.weight_3.disabled") - expect(page).to have_selector(".vote-action.weight_0.disabled") + click_link_or_button proposal.title["en"] + expect(page).to have_css(".vote-count[data-weight=\"1\"]", text: "1") + expect(page).to have_css(".vote-count[data-weight=\"2\"]", text: "0") + expect(page).to have_css(".vote-count[data-weight=\"3\"]", text: "0") + expect(page).to have_css(".vote-action.weight_1.disabled") + expect(page).to have_css(".vote-action.weight_2.disabled") + expect(page).to have_css(".vote-action.weight_3.disabled") + expect(page).to have_css(".vote-action.weight_0.disabled") expect(page).to have_content("Support limit reached") end @@ -336,23 +329,22 @@ let(:can_accumulate_supports_beyond_threshold) { true } it "shows the vote count and can vote" do - within "#proposal_#{proposal.id}" do + within "#proposals__proposal_#{proposal.id}" do expect(page).to have_content("G: 0") expect(page).to have_content("Y: 0") expect(page).to have_content("R: 1") expect(page).to have_content("A: 0") - expect(page).to have_content("CLICK TO VOTE") - click_link "Click to vote" end - expect(page).to have_selector(".vote-count[data-weight=\"1\"]", text: "1") - expect(page).to have_selector(".vote-count[data-weight=\"2\"]", text: "0") - expect(page).to have_selector(".vote-count[data-weight=\"3\"]", text: "0") + click_link_or_button proposal.title["en"] + expect(page).to have_css(".vote-count[data-weight=\"1\"]", text: "1") + expect(page).to have_css(".vote-count[data-weight=\"2\"]", text: "0") + expect(page).to have_css(".vote-count[data-weight=\"3\"]", text: "0") expect(page).not_to have_content("Change my vote") - click_link "Green" - expect(page).to have_selector(".vote-count[data-weight=\"3\"]", text: "1") - click_link "Change my vote" - click_link "Abstain" - expect(page).to have_selector(".vote-count[data-weight=\"3\"]", text: "0") + click_link_or_button "Green" + expect(page).to have_css(".vote-count[data-weight=\"3\"]", text: "1") + click_link_or_button "Change my vote" + click_link_or_button "Abstain" + expect(page).to have_css(".vote-count[data-weight=\"3\"]", text: "0") end end end @@ -364,35 +356,35 @@ let!(:vote_weights) { [] } it "doesn't count votes unless the minimum is achieved" do - within "#proposal_#{proposal.id}" do + within "#proposals__proposal_#{proposal.id}" do expect(page).to have_content("G: 0") - click_link "Click to vote" end - expect(page).to have_selector(".vote-count[data-weight=\"3\"]", text: "0") - click_link "Green" - expect(page).to have_selector(".vote-count[data-weight=\"3\"]", text: "0") + click_link_or_button proposal.title["en"] + expect(page).to have_css(".vote-count[data-weight=\"3\"]", text: "0") + click_link_or_button "Green" + expect(page).to have_css(".vote-count[data-weight=\"3\"]", text: "0") visit_component - within "#proposal_#{proposal.id}" do + within "#proposals__proposal_#{proposal.id}" do expect(page).to have_content("G: 0") end - within "#proposal_#{proposal2.id}" do + within "#proposals__proposal_#{proposal2.id}" do expect(page).to have_content("G: 0") - click_link "Click to vote" end - expect(page).to have_selector(".vote-count[data-weight=\"1\"]", text: "0") - click_link "Red" - expect(page).to have_selector(".vote-count[data-weight=\"1\"]", text: "1") + click_link_or_button proposal2.title["en"] + expect(page).to have_css(".vote-count[data-weight=\"1\"]", text: "0") + click_link_or_button "Red" + expect(page).to have_css(".vote-count[data-weight=\"1\"]", text: "1") visit_component - within "#proposal_#{proposal.id}" do + within "#proposals__proposal_#{proposal.id}" do expect(page).to have_content("G: 1") - click_link "Click to vote" end - expect(page).to have_selector(".vote-count[data-weight=\"3\"]", text: "1") + click_link_or_button proposal.title["en"] + expect(page).to have_css(".vote-count[data-weight=\"3\"]", text: "1") visit_component - within "#proposal_#{proposal.id}" do + within "#proposals__proposal_#{proposal.id}" do expect(page).to have_content("G: 1") end - within "#proposal_#{proposal2.id}" do + within "#proposals__proposal_#{proposal2.id}" do expect(page).to have_content("R: 1") end end @@ -403,19 +395,16 @@ let!(:vote_weights) { [] } it "shows the vote count" do - filter = legacy_version? ? ".state_check_boxes_tree_filter" : ".with_any_state_check_boxes_tree_filter" - within ".filters #{filter}" do + within '.filter-container [aria-labelledby="trigger-menu-state"]' do check "All" uncheck "All" check "Rejected" end - within "#proposal_#{proposal.id}" do + within "#proposals__proposal_#{proposal.id}" do expect(page).not_to have_content("G: 0") expect(page).not_to have_content("Y: 0") expect(page).not_to have_content("R: 0") expect(page).not_to have_content("A: 0") - expect(page).to have_content("REJECTED") - expect(page).not_to have_content("Click to vote") end end end @@ -424,12 +413,11 @@ let(:abstain) { false } it "shows the vote count" do - within "#proposal_#{proposal.id}" do + within "#proposals__proposal_#{proposal.id}" do expect(page).to have_content("G: 1") expect(page).to have_content("Y: 2") expect(page).to have_content("R: 3") expect(page).not_to have_content("A: 4") - expect(page).to have_link("Click to vote") end end end @@ -450,54 +438,50 @@ end it "shows the vote count" do - within "#proposal_#{proposal.id}" do + within "#proposals__proposal_#{proposal.id}" do expect(page).to have_content("G: 3") expect(page).to have_content("Y: 2") expect(page).to have_content("R: 1") expect(page).to have_content("A: 0") - expect(page).to have_link("Voted") - expect(page).to have_css("a.button.weight_1") + expect(page).to have_css(".voting-weight_1") end - within "#proposal_#{proposals[1].id}" do + within "#proposals__proposal_#{proposals[1].id}" do expect(page).to have_content("G: 0") expect(page).to have_content("Y: 1") expect(page).to have_content("R: 0") expect(page).to have_content("A: 0") - expect(page).to have_link("Voted") - expect(page).to have_css("a.button.weight_2") + expect(page).to have_css(".voting-weight_2") end - within "#proposal_#{proposals[2].id}" do + within "#proposals__proposal_#{proposals[2].id}" do expect(page).to have_content("G: 1") expect(page).to have_content("Y: 0") expect(page).to have_content("R: 0") expect(page).to have_content("A: 0") - expect(page).to have_link("Voted") - expect(page).to have_css("a.button.weight_3") + expect(page).to have_css(".voting-weight_3") end - within "#proposal_#{proposals[3].id}" do + within "#proposals__proposal_#{proposals[3].id}" do expect(page).to have_content("G: 0") expect(page).to have_content("Y: 0") expect(page).to have_content("R: 0") expect(page).to have_content("A: 1") - expect(page).to have_link("Voted") - expect(page).to have_css("a.button.weight_0") + expect(page).to have_css(".voting-weight_0") end end context "when votes are blocked" do - let!(:component) { create :proposal_component, :with_votes_blocked, participatory_space: participatory_space, settings: settings } + let!(:component) { create(:proposal_component, :with_votes_blocked, participatory_space: participatory_space, settings: settings) } it "shows the vote count and the vote button is disabled" do - within "#proposal_#{proposal.id}" do + within "#proposals__proposal_#{proposal.id}" do expect(page).to have_content("G: 3") - click_link "Voted" end - expect(page).to have_selector(".vote-count[data-weight=\"1\"]", text: "1") - expect(page).to have_selector(".vote-count[data-weight=\"2\"]", text: "2") - expect(page).to have_selector(".vote-count[data-weight=\"3\"]", text: "3") - expect(page).to have_selector(".vote-action.weight_1.disabled") - expect(page).to have_selector(".vote-action.weight_2.disabled") - expect(page).to have_selector(".vote-action.weight_3.disabled") + click_link_or_button proposal.title["en"] + expect(page).to have_css(".vote-count[data-weight=\"1\"]", text: "1") + expect(page).to have_css(".vote-count[data-weight=\"2\"]", text: "2") + expect(page).to have_css(".vote-count[data-weight=\"3\"]", text: "3") + expect(page).to have_css(".vote-action.weight_1.disabled") + expect(page).to have_css(".vote-action.weight_2.disabled") + expect(page).to have_css(".vote-action.weight_3.disabled") expect(page).not_to have_content("Change my vote") end end @@ -525,12 +509,11 @@ end it "shows the vote count", :caching do - within "#proposal_#{proposal.id}" do + within "#proposals__proposal_#{proposal.id}" do expect(page).to have_content("G: 1") expect(page).to have_content("Y: 2") expect(page).to have_content("R: 3") expect(page).to have_content("A: 4") - expect(page).to have_link("Click to vote") # check the cached card by maintaining the number of votes and change the weight Decidim::DecidimAwesome::VoteWeight.find_by(weight: 3).update(weight: 1) visit_component @@ -544,30 +527,25 @@ let(:voting_manifest) { nil } it "has normal support button" do - within "#proposal_#{proposal.id}" do - expect(page).to have_content("Support") + within "#proposals__proposal_#{proposal.id}" do expect(page).not_to have_content("G:") expect(page).not_to have_content("Y:") expect(page).not_to have_content("R:") - click_link proposal.title["en"] end + click_link_or_button proposal.title["en"] - within ".button--vote-button" do - expect(page).to have_content("Support") - expect(page).not_to have_content("Green") - expect(page).not_to have_content("Yellow") - expect(page).not_to have_content("Red") - end + expect(page).not_to have_css(".voting-voting_cards") + expect(page).not_to have_content("Green") + expect(page).not_to have_content("Yellow") + expect(page).not_to have_content("Red") end end it "show the modal window on voting" do - within "#proposal_#{proposal.id}" do - click_link "Click to vote" - end - expect(page).to have_selector("#loginModal", visible: :hidden) - click_link "Abstain" - expect(page).to have_selector("#loginModal", visible: :visible) + click_link_or_button proposal.title["en"] + expect(page).to have_css("#loginModal", visible: :hidden) + click_link_or_button "Abstain" + expect(page).to have_css("#loginModal", visible: :visible) end end end diff --git a/spec/types/localized_custom_fields_type_spec.rb b/spec/types/localized_custom_fields_type_spec.rb new file mode 100644 index 000000000..3ba2a83a7 --- /dev/null +++ b/spec/types/localized_custom_fields_type_spec.rb @@ -0,0 +1,91 @@ +# frozen_string_literal: true + +require "spec_helper" +require "decidim/api/test/type_context" + +module Decidim::DecidimAwesome + describe LocalizedCustomFieldsType do + include_context "with a graphql class type" + + let(:model) do + OpenStruct.new(locale: "en", fields:) + end + + let(:fields) do + [{ + "type" => "text", + "label" => "Name", + "userData" => "John Barleycorn" + }, + { + "type" => "number", + "label" => "Age", + "userData" => 12 + }] + end + + describe "locale" do + let(:query) { "{ locale }" } + + it "returns the locale" do + expect(response).to include("locale" => "en") + end + end + + describe "fields" do + let(:query) { "{ fields }" } + + it "returns the fields" do + expect(response).to include("fields" => fields) + end + end + + describe "machineTranslated" do + let(:query) { "{ machineTranslated }" } + + it "returns false by default" do + expect(response).to include("machineTranslated" => false) + end + + context "when the model responds to machine_translated" do + let(:model) { OpenStruct.new(machine_translated: true) } + + it "returns the correct value" do + expect(response).to include("machineTranslated" => true) + end + + context "and the model returns false" do + let(:model) { OpenStruct.new(machine_translated: false) } + + it "returns the correct value" do + expect(response).to include("machineTranslated" => false) + end + end + + context "and the model returns a nil" do + let(:model) { OpenStruct.new(machine_translated: nil) } + + it "returns false" do + expect(response).to include("machineTranslated" => false) + end + end + + context "and the model returns a non-boolean evaluating as present" do + let(:model) { OpenStruct.new(machine_translated: "true") } + + it "returns true" do + expect(response).to include("machineTranslated" => true) + end + end + + context "and the model returns a non-boolean evaluating as blank" do + let(:model) { OpenStruct.new(machine_translated: "") } + + it "returns false" do + expect(response).to include("machineTranslated" => false) + end + end + end + end + end +end diff --git a/spec/types/proposal_type_spec.rb b/spec/types/proposal_type_spec.rb index e89bde5a6..8be8ef616 100644 --- a/spec/types/proposal_type_spec.rb +++ b/spec/types/proposal_type_spec.rb @@ -7,8 +7,37 @@ module Decidim::Proposals describe ProposalType, type: :graphql do include_context "with a graphql class type" let(:component) { create(:proposal_component) } + let(:participatory_space) { component.participatory_space } + let(:organization) { participatory_space.organization } let!(:extra_fields) { create(:awesome_proposal_extra_fields, :with_votes, proposal: model) } - let(:model) { create :proposal, component: component } + let(:custom_fields) do + { + foo: "[{\"type\":\"text\",\"required\":true,\"label\":\"Name\",\"name\":\"name\",\"subtype\":\"text\"},{\"type\":\"number\",\"required\":false,\"label\":\"Age\",\"name\":\"age\",\"subtype\":\"number\"}]" + } + end + let!(:config) { create(:awesome_config, organization: organization, var: :proposal_custom_fields, value: custom_fields) } + let!(:constraint) { create(:config_constraint, awesome_config: config, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => slug }) } + + let(:slug) { participatory_space.slug } + let(:xml) { "
Name
John Barleycorn
Age
12
" } + let(:fields) do + [ + { "type" => "text", "required" => true, "label" => "Name", "name" => "name", "subtype" => "text", "userData" => "John Barleycorn" }, + { "type" => "number", "required" => false, "label" => "Age", "name" => "age", "subtype" => "number", "userData" => "12" } + ] + end + let(:translated_fields) do + fields.map { |field| field.merge("userData" => field["userData"].gsub("John Barleycorn", "Joan Ordi")) } + end + let(:body) do + { + "en" => xml, + "machine_translations" => { + "ca" => xml.gsub("John Barleycorn", "Joan Ordi") + } + } + end + let(:model) { create(:proposal, component: component, body: body) } describe "id" do let(:query) { "{ id }" } @@ -27,6 +56,7 @@ module Decidim::Proposals end it "returns the weights of votes for this proposal" do + model.update_vote_weights! expect(response["voteWeights"]).to eq({ "1" => 1, "2" => 1, "3" => 1, "4" => 1, "5" => 1 }) end end @@ -40,5 +70,56 @@ module Decidim::Proposals end end end + + describe "bodyFields" do + let(:query) do + '{ bodyFields { + locales + translation(locale: "en") + translations { + locale + fields + machineTranslated + } + }}' + end + + it "returns the custom fields for this proposal" do + expect(response["bodyFields"]["locales"]).to match_array(%w(en ca)) + expect(response["bodyFields"]["translation"]).to match_array(fields) + translations = response["bodyFields"]["translations"] + expect(translations).to contain_exactly({ + "locale" => "en", + "fields" => fields, + "machineTranslated" => false + }, { + "locale" => "ca", + "fields" => translated_fields, + "machineTranslated" => true + }) + end + + context "when the body is malformed" do + let(:body) { { "en" => "Nonsense stuff" } } + + it "returns the custom fields for this proposal" do + expect(response["bodyFields"]["locales"]).to match_array(%w(en)) + expect(response["bodyFields"]["translation"]).to contain_exactly({ "type" => "text", "required" => true, "label" => "Name", "name" => "name", "subtype" => "text" }, { "type" => "number", "required" => false, "label" => "Age", "name" => "age", "subtype" => "number" }) + end + + context "when there is a textarea in the definition" do + let(:custom_fields) do + { + foo: "[{\"type\":\"text\",\"required\":true,\"label\":\"Name\",\"name\":\"name\",\"subtype\":\"text\"},{\"type\":\"textarea\",\"required\":false,\"label\":\"Description\",\"name\":\"description\",\"subtype\":\"text\"}]" + } + end + + it "returns the custom fields for this proposal" do + expect(response["bodyFields"]["locales"]).to match_array(%w(en)) + expect(response["bodyFields"]["translation"]).to contain_exactly({ "type" => "text", "required" => true, "label" => "Name", "name" => "name", "subtype" => "text" }, { "type" => "textarea", "required" => false, "label" => "Description", "name" => "description", "subtype" => "text", "userData" => "Nonsense stuff" }) + end + end + end + end end end diff --git a/spec/types/translated_custom_fields_type_spec.rb b/spec/types/translated_custom_fields_type_spec.rb new file mode 100644 index 000000000..36f8501db --- /dev/null +++ b/spec/types/translated_custom_fields_type_spec.rb @@ -0,0 +1,126 @@ +# frozen_string_literal: true + +require "spec_helper" +require "decidim/api/test/type_context" + +module Decidim + module DecidimAwesome + describe TranslatedCustomFieldsType do + include_context "with a graphql class type" + + shared_context "with machine translations" do + let(:model) do + { + ca: [{ "userData" => "Hola" }], + en: [{ "userData" => "Hello" }], + es: [], + machine_translations: { + es: [{ "userData" => "Ey" }] + } + } + end + end + + let(:model) do + { + ca: [{ "userData" => "Hola" }], + en: [{ "userData" => "Hello" }] + } + end + + describe "locales" do + let(:query) { "{ locales }" } + + it "returns the available locales" do + expect(response["locales"]).to include("en", "ca") + end + + context "when there are machine translations" do + include_context "with machine translations" + + it "returns all available locales with no duplicates" do + expect(response["locales"]).to include("en", "ca", "es") + end + end + end + + describe "translations" do + context "when locales are not provided" do + let(:query) { "{ translations { locale fields }}" } + + it "returns all the translations" do + translations = response["translations"] + expect(translations.length).to eq(2) + expect(translations).to include("locale" => "ca", "fields" => [{ "userData" => "Hola" }]) + expect(translations).to include("locale" => "en", "fields" => [{ "userData" => "Hello" }]) + end + + context "when there are machine translations" do + include_context "with machine translations" + + let(:query) { "{ translations { locale fields machineTranslated }}" } + + it "returns correct translations" do + translations = response["translations"] + expect(translations.length).to eq(3) + expect(translations).to include("locale" => "ca", "fields" => [{ "userData" => "Hola" }], "machineTranslated" => false) + expect(translations).to include("locale" => "en", "fields" => [{ "userData" => "Hello" }], "machineTranslated" => false) + expect(translations).to include("locale" => "es", "fields" => [{ "userData" => "Ey" }], "machineTranslated" => true) + end + + context "with defined translation overriding machine translation" do + let(:model) do + { + ca: [{ "userData" => "Hola" }], + en: [{ "userData" => "Hello" }], + es: [{ "userData" => "Hola" }], + machine_translations: { + es: [{ "userData" => "Ey" }] + } + } + end + + it "returns correct translations" do + translations = response["translations"] + expect(translations.length).to eq(3) + expect(translations).to include("locale" => "ca", "fields" => [{ "userData" => "Hola" }], "machineTranslated" => false) + expect(translations).to include("locale" => "en", "fields" => [{ "userData" => "Hello" }], "machineTranslated" => false) + expect(translations).to include("locale" => "es", "fields" => [{ "userData" => "Hola" }], "machineTranslated" => false) + end + end + end + end + + context "when locales are provided" do + let(:query) { '{ translations(locales: ["ca"]) { locale fields }}' } + + it "returns the translations on the provided locales" do + translations = response["translations"] + expect(translations).to include("locale" => "ca", "fields" => [{ "userData" => "Hola" }]) + expect(translations).not_to include("locale" => "en", "fields" => [{ "userData" => "Hello" }]) + end + end + end + + describe "translation" do + context "when the locale is found" do + let(:query) { '{ translation(locale: "ca") }' } + + it "returns the translation for that language" do + translation = response["translation"] + expect(translation).to eq([{ "userData" => "Hola" }]) + end + end + + context "when the locale is not found" do + let(:query) { '{ translation(locale: "fake") }' } + + it "returns a null value" do + translation = response["translation"] + expect(translation).to be_nil + end + end + end + end + end +end